永发信息网

oracle中使用split函数问题

答案:2  悬赏:0  手机版
解决时间 2021-02-13 15:58
  • 提问者网友:活着好累
  • 2021-02-12 23:53
我使用的是网上找到的方法:
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
str_split ty_str_split := ty_str_split ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);

WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i);

IF j = 0
THEN
j := len;
str := SUBSTr (p_str, i);
str_split.EXTEND;
str_split (str_split.COUNT) := str;

IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTr (p_str, i, j - i);
i := j + len1;
str_split.EXTEND;
str_split (str_split.COUNT) := str;
END IF;
END LOOP;

RETURN str_split;
END fn_split;
但是运行编译时,提示ty_str_split必须声明,怎么声明呢?
最佳答案
  • 五星知识达人网友:冷風如刀
  • 2021-02-13 00:53
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN VARCHAR2
应该是这样
全部回答
  • 1楼网友:毛毛
  • 2021-02-13 01:01
(1)定义split_type类型:   create or replace type split_type is table of varchar2 (4000) /(2)定义split函数:   create or replace function split (p_str in varchar2, p_delimiter in varchar2) return split_type is j int := 0; i int := 1; len int := 0; len1 int := 0; str varchar2 (4000); my_split split_type := split_type (); begin len := length (p_str); len1 := length (p_delimiter); while j < len loop j := instr (p_str, p_delimiter, i); if j = 0 then j := len; str := substr (p_str, i); my_split.extend; my_split (my_split.count) := str; if i >= len then exit; end if; else str := substr (p_str, i, j - i); i := j + len1; my_split.extend; my_split (my_split.count) := str; end if; end loop; return my_split; end split; /(3)存储过程中,使用类似   for t in ( select a,b,c,d from table (split('1,2,3,4',',')) ) loop--注意下面的inserti语句,varchar类型的值需要补充引号上去execute immediate ' insert into tablename set fieldname = '||t.a ;execute immediate 'commit';   end loop;   的查询语句,把分开的结果拼成sql语句并写入到表中。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯