【DM】根据指定字符分割字符串,返回表

一、创建记录
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,',','));

 

posted @ 2024-02-04 14:52  喝了烫嘴的水  阅读(183)  评论(0编辑  收藏  举报