一、创建记录 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,',','));
标签:字符,DM,strval,--,SPLITSTR,字符串,TYPE,id,ROW From: https://www.cnblogs.com/WuUranus/p/18006174