`
sangei
  • 浏览: 328984 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

pl/sql 实现类似于split 的分割字符串的功能

阅读更多

1、先建立一个包,定义数组类型:
CREATE OR REPLACE PACKAGE pkg_string is

  -- Purpose : 字符串处理

  -- Public type declarations
  TYPE StringArray IS VARRAY(2000) OF VARCHAR2(2000);

END pkg_string;

2、拆分字符串的通用函数:
CREATE OR REPLACE FUNCTION fun_ParseToArray(
  a_SourceString  IN VARCHAR2,    --源字符串
  a_Delimiter     IN VARCHAR2     --拆分的分隔符
) RETURN pkg_string.StringArray IS
-- ********************************************************
-- 根据分隔符拆分字符串为数组
-- ********************************************************
v_Result      pkg_string.StringArray; --数组
iCount        INTEGER;
iBegin        INTEGER;
sValue        VARCHAR2(2000);
sSplitString  VARCHAR2(2000);
BEGIN
    --检查参数
    IF a_SourceString IS NULL OR a_Delimiter IS NULL THEN
      RETURN(v_Result);
    END IF;
    IF a_SourceString = '' THEN
      RETURN(v_Result);
    END IF;
    --初始化数组
    v_Result := pkg_string.StringArray();
    --Only one entry was found
    IF instr(a_SourceString,a_Delimiter) = 0 THEN
      -- 数组加1维
      v_Result.extend();
      -- 将数据存入数组
      v_Result(1) := a_SourceString;
      RETURN(v_Result);
    END IF;
    iCount := 0;
    sSplitString := a_SourceString;
    LOOP
        iBegin := INSTR(sSplitString,a_Delimiter);
        EXIT WHEN iBegin < 1;
        sValue := Substr(sSplitString,1,iBegin - 1);
        sSplitString := SubStr(sSplitString,iBegin + 1);
        -- 计数器加1
       iCount := iCount + 1;
       -- 数组加1维
       v_Result.extend();
       -- 将数据存入数组
        v_Result(iCount) := sValue;
    END LOOP;
    --Set last entry
    sSplitString := SubStr(sSplitString, iBegin);

    --Update array and counter if necessary
    IF Length(sSplitString) > 0 THEN
     -- 计数器加1
      iCount := iCount + 1;
      -- 数组加1维
      v_Result.extend();
     -- 将数据存入数组
     v_Result(iCount) := sSplitString;
    END IF;

    RETURN(v_Result);
EXCEPTION
   WHEN others THEN
       return v_Result ;
END fun_ParseToArray;


3、组成SQL
...
vs_row pkg_string.StringArray;
vs_column pkg_string.StringArray;
...
vs_row := fun_ParseToArray(你的一列数据,'#');
--再用for循环拆分vs_row的列:
vs_column(j) := fun_ParseToArray(vs_row(i),'|');
再把拆分出来的数据入表

 

 

 

今天闲着没事就写了一个小程序:
1>:对这种格式的分割:'123,zhonggou,mama,' 最后要有一个逗号。

set serveroutput on;
create or replace procedure sp_test_proce(str varchar2)
as
v_Str char(1);
j NUMBER :=1;
vsResult varchar2(256);
begin
for i IN 1..length(str) loop
v_Str := substr(str,i,1);
if v_Str = ',' then
vsResult := substr(str,j,i-j);
j :=i+1;
dbms_output.put_line(vsResult);
end if;
end loop;
end;

 

2:

create or replace procedure Test
is
tempValue varchar(2000);
AID varchar2(32);
begin
begin
      tempValue:='ABCD:BDF:CD:DDF:EDF:F:G:H:I:J:K:';

      while(instr(tempValue,':')>0) loop
       if INSTR(tempValue,':' ) > 0 then
             AID := SUBSTR(tempValue ,1,INSTR(tempValue,':') - 1 );
             DBMS_OUTPUT.put_line(AID);
             tempValue := SUBSTR(tempValue,INSTR(tempValue,':') + 1 , LENGTH(tempValue) - INSTR(tempValue,':'));
          else
             AID := tempValue;
             tempValue := '';
          end if;
      end loop;

end;
end;

 

2>:对这种格式的分割:'123,zhonggou,mama'

create or replace procedure Test
is
temp varchar(2000);
result varchar2(32);
begin
begin
      temp:='123,zhonggou,mama';

      while(length(temp)>0) loop
       if INSTR(temp,',' ) > 0 then
             result:= SUBSTR(temp ,1,INSTR(temp,',') - 1 );
            
             temp := SUBSTR(temp,INSTR(temp,',') + 1 , LENGTH(temp) - INSTR(temp,','));
          else
             result:= temp;
             temp:= '';
          end if;
DBMS_OUTPUT.put_line(result);
      end loop;

end;
end;

 

分享到:
评论

相关推荐

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    pl/sql developer11.0

    pl/sql developer11.0下载 pl/sql developer11.0下载 pl/sql developer11.0下载

    PL/SQL Developer9.06

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用...PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要优势。

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...

    PL/SQL User's Guide and Reference (官方CHM)

    PL/SQL, Oracle's procedural extension of SQL, is an advanced fourth-generation programming language (4GL). It offers modern features such as data encapsulation, overloading, collection types, ...

    Oracle PL/SQL语言初级教程

    PL/SQL是Oracle对标准数据库语言的扩展,Oracle公司已经将PL/SQL整合到Oracle 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本教程将以循速渐进的方式讲述PL/SQL基础语法,结构和组件、以及...

    pl/sql数据库学习笔记

    pl/sql数据库学习笔记,包含一些基础知识,和案例代码

    PL/SQL VCS插件安装包+PL/SQL

    PL/SQL VCS插件安装包+PL/SQL 实现功能:结合VSS+VCS ,使用PL/SQL工具进行oracle脚本的版本管理

    Pl/Sql程序设计

    1、PL/SQL简介 2、PL/SQL基础 3、记录和表 4、在PL/SQL中使用SQL 5、内置SQL函数 6、游标 7、过程和函数 ...

    PL/SQL免安装版

    在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL免安装版,点击即用,非常方便!

    pl/sql develpment 8 下载

    pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl...

    PL/SQL Developer 客户端

    在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 ...

    pl/sql最新中文手册

    最新pl/sql7.0中文手册

    PL/SQL developer 12.07 注册码 可以使用

    PL/SQL developer 12.07 注册码 可以使用,不错,自己用过了,分享给大家

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    一个对数据库的操作工具PL/SQL,能够对ORACLE\SQL进行很好的帮助操作!

    PL/SQL Developer v8.0.3 1510

    PL/SQL Developer 8.0.3 1510 含注册机 PL/SQL Developer is an Integrated Development Environment that is specifically targeted at the development of stored program units for Oracle Databases. Over ...

    oracle10g_pl/sql

    oracle10g pl/sql完备教程,供初学者学习与开发者参考

    PL/SqlDeveloper汉化版

    虽然目前来看 PL/SQL Developer 的功能远不如 SQL Developer,但它是用纯 JAVA 开发的 ORACLE 数据库管理工具,所以可以比较轻松的支持跨操作系统平台使用,可以在非 windows OS 上使用。由于 PL/SQL Developer 在 ...

    pl/sql64位

    很多时候你是不是为了32为的plsql的各种复杂配置烦恼,不要紧,现在下载64位的pl/sql,不需要繁琐的配置,让你更轻松

Global site tag (gtag.js) - Google Analytics