`
king_tt
  • 浏览: 2125408 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle 自定义split 函数

 
阅读更多

Oracle没有提供split函数,但可以自己建立一个函数实现此功能。比如“abc defg hijkl nmopqr stuvw xyz”,分隔符是空格,但空格个数不定。

源代码:

CREATEORREPLACETYPEty_str_splitISTABLEOFVARCHAR2(4000);

CREATEORREPLACEFUNCTIONfn_var_split(
p_str
INVARCHAR2,
p_delimiter
INVARCHAR2
)
RETURNty_str_split
IS
j
INT:=0;
lenINT:=0;
strVARCHAR2(4000);
str_splitty_str_split:
=ty_str_split();
v_str
VARCHAR2(4000):=RTRIM(LTRIM(p_str,p_delimiter),p_delimiter);
BEGIN
len:=LENGTH(v_str);

WHILElen>0
LOOP
j:
=INSTR(v_str,p_delimiter,1);

IFj=0
THEN
str:=SUBSTR(v_str,1);
len:=0;
str_split.EXTEND;
str_split(str_split.
COUNT):=str;
ELSE
str:=SUBSTR(v_str,1,j-1);
v_str:
=LTRIM(LTRIM(v_str,str),p_delimiter);
len:=LENGTH(v_str);
str_split.EXTEND;
str_split(str_split.
COUNT):=str;
ENDIF;
ENDLOOP;

RETURNstr_split;
ENDfn_var_split;
/


测试

结果:

1
12
123
1234
12345

DECLARE
CURSORc
IS
SELECT*FROMTABLE(CAST(fn_var_split(';1;12;;123;;;1234;;;;12345;',';')ASty_str_split));
rc
%ROWTYPE;
BEGIN
OPENc;
LOOP
FETCHcINTOr;
EXITWHENc%NOTFOUND;
DBMS_OUTPUT.put_line(r.column_value);
ENDLOOP;
CLOSEc;
END;
/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics