永发信息网

oracle中使用split函数问题

答案:2  悬赏:0  手机版
解决时间 2021-02-13 15:58
我使用的是网上找到的方法:
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必须声明,怎么声明呢?
最佳答案
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN VARCHAR2
应该是这样
全部回答
(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语句并写入到表中。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
过几天就过生日了,广州不知道哪里有那种大包
平桥小吃街地址在哪,我要去那里办事
阳历2015年11月25号阴历是几
被移动无缘无故扣了话费怎么办?
佳顺服装整理我想知道这个在什么地方
Time and tide wait for no man. 什么意思?
2017年3月24号几点开业大吉
蓬莱苑南街/北七家东路(路口)在什么地方啊,
济南到泰安走104国道好走吗?(09年4月)
DNF女鬼剑二觉后外观会变吗?
12年悦动大修完正时跳齿,有没有人可以分享一
林隆北路/和平南路(路口)在哪里啊,我有事要
北京顺义仁和区有什么好玩的地方
【矶】矶字可组什么词?除了钓矶
PLC中如何编程判断温度上升趋势,急 急 急
推荐资讯
家用蒸汽挂烫机怎样安装
新明珠装饰广场我想知道这个在什么地方
动词如何变成名词?跟那些后缀?还有名词动词形
宏蕊美容美发地址在什么地方,我要处理点事
梦见朋友死了 在我面前不说话/可是我知道他想
猎豹黑金刚为什么停产柴油版汽车
头皮有神经性皮炎用什么洗头好
亳州市名优医药连锁有限公司怎么去啊,有知道
已知函数f(x)=(2^x-1)/(2^x+1),若方程f(x)=m
魔蝎座男孩怎么追求水瓶座女孩
唐河县第十三小学地址有知道的么?有点事想过
电脑连接电视看的电影有没有记录备份?下次看
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?