ORACLE(PL/SQL) 根据字符分割(SPLIT)字符串返回数组
ORACLE没有提供现成的函数来进行字符串的分割,网上有很多中现实方法,本文介绍一种我自己的实现方式。主要是使用Oracle内部函数instr和substr函数的方式来实现。
CREATE OR REPLACE FUNCTION str_split(in_str VARCHAR2,in_sep VARCHAR2)
RETURN type_split
IS
--分割字符串位置索引
v_sep_pos PLS_INTEGER;
--存储分割后的字符串数组
v_str_array type_split:=type_split();
--substr起始索引
v_start_idx PLS_INTEGER:=1;
BEGIN
v_sep_pos:=instr(in_str,in_sep);
WHILE(v_sep_pos>0)
LOOP
v_str_array.extend;
v_str_array(v_str_array.last):=substr(in_str,v_start_idx,v_sep_pos-v_start_idx);
v_start_idx:=v_sep_pos+1;
v_sep_pos:=instr(in_str,in_sep,v_start_idx);
END LOOP;
v_str_array.extend;
v_str_array(v_str_array.last):=substr(in_str,v_start_idx,length(in_str)-v_start_idx+1);
FOR i in v_str_array.first..v_str_array.last
LOOP
dbms_output.put_line(v_str_array(i));
END LOOP;
RETURN v_str_array;
END str_split;
验证测试:
SQL> set serveroutput on;
SQL>
SQL> DECLARE
2 v_str_array type_split;
3 BEGIN
4 v_str_array:=str_split("YaoMing#T-MAC#LBJ","#");
5 FOR i in v_str_array.first..v_str_array.last
6 LOOP
7 dbms_output.put_line(v_str_array(i));
8 END LOOP;
9 END;
10 /
YaoMing
T-MAC
LBJ
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: Oracle table()函数查询函数返回的结果集