数据库
首页 > 数据库> > Oracle中的Split函数

Oracle中的Split函数

作者:互联网

首先需要定义 2 个类型

1. Row 类型 CREATE OR REPLACE TYPE ty_row_str_split  as object (strValue VARCHAR2 (4000)) 2. Table 类型 CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split
创建函数:
复制代码 CREATE OR REPLACE FUNCTION fn_split(p_str       IN VARCHAR2,
                                    p_delimiter IN VARCHAR2)
  RETURN ty_tbl_str_split IS
  j         INT := 0;
  i         INT := 1;
  len       INT := 0;
  len1      INT := 0;
  str       VARCHAR2(4000);
  str_split ty_tbl_str_split := ty_tbl_str_split();
BEGIN
  len  := LENGTH(p_str);
  len1 := LENGTH(p_delimiter);


  WHILE j < len LOOP
    j := INSTR(p_str, p_delimiter, i);
  
    IF j = 0 THEN
      j   := len;
      str := SUBSTR(p_str, i);
      str_split.EXTEND;
      str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
    
      IF i >= len THEN
        EXIT;
      END IF;
    ELSE
      str := SUBSTR(p_str, i, j - i);
      i   := j + len1;
      str_split.EXTEND;
      str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
    END IF;
  END LOOP;


  RETURN str_split;
END fn_split;

复制代码
使用样例:
select to_number(strvalue) as Value from table(fn_split('1,2,3',','))
select to_char(strvalue) as Value from table(fn_split('aa,bb,cc',','))   select to_char(strvalue) as Value from 表 table(fn_split(表.字段,'$')) --------------------------------------------------- ***************************************** 方法2: ---------------------------------------------------- CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)

 

复制代码 代码 create or replace function split(p_list varchar2,p_sep varchar2 := ',') return type_split pipelined
IS
 l_idx pls_integer;
 v_list varchar2(4000) := p_list;
 begin
      loop
           l_idx := instr(v_list,p_sep);
           if l_idx > 0 then
               pipe row(substr(v_list,1,l_idx-1));
               v_list := substr(v_list,l_idx+length(p_sep));
           else
                pipe row(v_list);
                exit;
           end if;

      end loop;


      return;
 end split; 原文:https://www.cnblogs.com/march3/archive/2009/07/23/1529442.html 实际测试过方法一

标签:函数,idx,ty,list,split,str,Oracle,row,Split
来源: https://www.cnblogs.com/yh-xiaoxiami/p/16086593.html