数据库表存储多个字段值以“,”分隔转换成一对一oracle函数
//table type
create or replace type table_multiyqc as object (jh varchar2(100),yqcdm varchar2(100));
create or replace type table_multiyqc1 as table of table_multiyqc
//函数
create or replace function f_multitosingleyqc return table_multiyqc1
pipelined is
v_jh varchar2(100);
v_yqcdm varchar2(100);
v_sql varchar2(1000);
type cur_type is ref cursor;
cur cur_type;
v_table table_multiyqc;
cursor c_cur is
SELECT jh, REGEXP_SUBSTR(dydm, '[^,]+', 1, l) AS dydm
FROM ys_daa01, (SELECT LEVEL l FROM DUAL CONNECT BY LEVEL <= 100)
WHERE l <= LENGTH(dydm) - LENGTH(REPLACE(dydm, ',')) + 1
ORDER BY 1, 2;
/*SELECT jh,REGEXP_SUBSTR(dydm, '[^,]+', 1, LEVEL, 'i') dydm FROM (select * from ys_daa01 where dydm like'%,%')
CONNECT BY LEVEL <= LENGTH(dydm) - LENGTH(REGEXP_REPLACE(dydm, ',', ''))+1
union all
SELECT jh, dydm from ys_daa01 where dydm not like '%,%' ;*/
begin
for mycur in c_cur loop
v_jh := mycur.jh;
v_yqcdm := mycur.dydm;
v_table := table_multiyqc(v_jh, v_yqcdm);
pipe row(v_table);
end loop;
return;
end;
代码如上,仅供参考

浙公网安备 33010602011771号