数据库表存储多个字段值以“,”分隔转换成一对一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号
浙公网安备 33010602011771号