一、创建记录
CREATE OR REPLACE TYPE TYPE_ROW_SPLITSTR AS OBJECT (
id INT,
val NVARCHAR(500)
);
二、创建嵌套表
CREATE OR REPLACE TYPE TYPE_TABLE_SPLITSTR is TABLE OF TYPE_ROW_SPLITSTR;
三、自定义函数
CREATE OR REPLACE FUNCTION splitTable(
strval IN TEXT,
splitstr IN CHAR(1)
)
RETURN TYPE_TABLE_SPLITSTR
AUTHID DEFINER
PIPELINED
AS
R Type_Row_SplitStr; --每一行
i INT; --自定义截取字符串开始值
id INT; --自定ID
tmpstr1 TEXT; --截取后的值
BEGIN
id:=1;
--INSTR(char1,char2[,n,[m]])
--从 char1 的第 n 个字节开始查找字符串 char2 的第 m 次出现的位置
i:=INSTR(strval,splitstr);
while i>0
loop
tmpstr1 :=substring(strval,1,i-1);
strval :=substring(strval,i+1,len(strval)+i);
R := Type_Row_SplitStr(id, tmpstr1);
PIPE ROW (R);
i :=INSTR(strval,splitstr);
id :=id+1;
end loop;
if ifnull(strVal,'')<>''
then
R := Type_Row_SplitStr(id,strVal);
PIPE ROW (R);
end if;
END;
用法的:select * From table(splitTable('1,3,5,',','));