Oracle Functions 字符串切割

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE OR REPLACE FUNCTION split_str( --以特定的符号切割字符串,返回TBL_SPLIT_STR格式的表数据
var_str IN VARCHAR2,
var_split IN VARCHAR2)
RETURN Tbl_StrSplit
IS
var_out Tbl_StrSplit;
var_tmp VARCHAR2(4000);
var_element VARCHAR2(4000);
BEGIN
var_tmp := var_str;
var_out := Tbl_StrSplit();
--如果存在匹配的分割符
WHILE instr(var_tmp, var_split) > 0
LOOP
var_element := SUBSTR(var_tmp, 1, instr(var_tmp, var_split) - 1);
var_tmp := SUBSTR(var_tmp, instr(var_tmp, var_split) + LENGTH(var_split), LENGTH(var_tmp));
--var_out.extend(1);
var_out.extend;
--重新设置var_element值
var_element :=SUBSTR(var_element,instr(var_element,'>',1)+1);
var_out(var_out.count) := var_element;
--打印
--SET SERVEROUT ON;
--DBMS_OUTPUT.PUT_LINE(var_element);
--打印
END LOOP;
--var_out.extend(1);
var_out.extend;
var_out(var_out.count) := var_tmp;
RETURN var_out;
END split_str;

示例

1
2
3
select * from table(split_str('1,2,3,', ','));

select v.column_value from table(split_str('1,2,3,', ',')) v

例如:表 table_namesplit_str_column 列值为 1,2,3 ,切割后变为三条数据:

1
2
select v.column_value, t.id
from table_name t, table(split_str(t.split_str_column, ',')) v