`
sangei
  • 浏览: 336537 次
  • 性别: 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;

 

分享到:
评论

相关推荐

    oracle10g_pl/sql

    通过深入学习Oracle 10g PL/SQL,不仅可以掌握数据库编程的基本技能,还能了解如何利用这些技能来设计和实现复杂的业务逻辑,优化数据库性能,以及更好地维护和管理Oracle数据库系统。本教程涵盖了所有这些关键知识...

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

    PL/SQL是Oracle公司开发的一种过程化语言,全称为Procedural Language/Structured Query Language,它是SQL的一个扩展,专门用于处理Oracle数据库系统。这个“PL/SQL工具”显然是一个用于辅助管理和操作Oracle数据库...

    pl/sql最新中文手册

    3. **异常处理**:在PL/SQL中,异常处理是通过EXCEPTION关键字实现的,用于捕获并处理运行时错误。手册会详细解释如何定义和使用预定义及自定义异常。 4. **数据库操作**:PL/SQL与Oracle数据库紧密集成,可以执行...

    Oracle PL/SQL实战(待续)

    同时,PL/SQL支持多种数据类型,包括数值类型(NUMBER)、字符类型(VARCHAR2, CHAR)、日期类型(DATE)等,以及复合类型如记录(RECORD)和表类型(TABLE)。 此外,PL/SQL的包(PACKAGE)概念是将相关的过程和...

    pl/sql developer11.0

    PL/SQL Developer 11.0作为一套强大的集成开发环境(IDE),提供了许多有助于提升PL/SQL开发效率的工具和功能。 1. **代码编辑器**:PL/SQL Developer提供了一个功能丰富的代码编辑器,支持语法高亮、自动完成、...

    plsql分割字符串

    通过对`FUNCTION_SF_SPLIT_STRING`的详细分析,我们可以看到,在PL/SQL中实现字符串分割不仅需要理解基本的字符串操作函数,还需要具备良好的逻辑思维和控制结构设计能力。掌握这种方法不仅可以提高数据库应用程序的...

    oracle 9i pl/sql程序设计笔记

    通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...

    pl/sql64位

    PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...

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

    总结来说,"PL/SQL VCS插件安装包+PL/SQL"提供了一种高效的方式来管理Oracle数据库中的PL/SQL代码,通过整合VSS或其他VCS系统,实现了版本控制功能,促进了团队协作,增强了代码的可维护性。无论是在小型项目还是...

    PL/SQL Developer 远程连接Oracle数据库

    远程连接Oracle数据库是PL/SQL Developer的一项关键功能,允许用户在本地计算机上操作和管理远程服务器上的数据库,这对于分布式系统开发和远程协作尤其重要。 在使用PL/SQL Developer进行远程连接时,首先需要了解...

    pl/sql 免安装,绿色版pl/sql

    1. **PL/SQL编程支持**:PL/SQL Developer内置了强大的PL/SQL编辑器,支持语法高亮、自动完成、错误检查等功能,使开发人员能够高效编写PL/SQL代码。此外,还具备代码折叠、查找替换、书签设置等实用功能,提高了...

    oracle pl/sql从入门到精通 配套源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...

    PL/SQL 基本知识

    PL/SQL是Oracle数据库系统中的一个核心组件,全称为“Procedural ...而`jbpm.sql`文件可能包含的流程管理相关代码,正是PL/SQL在企业实际应用中的具体体现,它展示了如何通过PL/SQL来实现复杂的业务逻辑和数据操作。

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

    - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性。 - **环境搭建与配置**:...

    pl/sql快捷插件

    这款软件为Oracle数据库管理员、开发人员和测试人员提供了便捷的SQL和PL/SQL编写、调试和执行功能。而“pl/sql快捷插件”则是针对PL/SQL Developer的一个增强工具,它旨在提高用户的开发效率和工作流程。 PL/SQL...

    PL/SQL编程基础知识

    PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库的核心组成部分之一,PL/SQL在数据库应用程序开发...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(NUMBER、BINARY_INTEGER、PLS_INTEGER)、字符型(VARCHAR2、CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合数据类型如记录和数组。 3. **控制...

    PL/SQL入门到精通书的源代码

    8. **动态SQL**:有时你需要在运行时构建SQL语句,这可以通过EXECUTE IMMEDIATE语句实现,它允许你动态执行字符串形式的SQL。 9. **包(Package)**:包是一种组织PL/SQL对象(如过程、函数、变量)的方式,可以...

    PL/SQL下载

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...

Global site tag (gtag.js) - Google Analytics