Código:
create or replace type split_tbl as table of varchar2(32767);
Código:
luego puedo hacer:CREATE OR REPLACE FUNCTION split(p_list varchar2,p_del varchar2 := ';') RETURN split_tbl pipelined IS l_idx pls_integer; l_list varchar2(32767) := p_list; --l_value varchar2(32767); BEGIN loop l_idx := instr(l_list,p_del); IF l_idx > 0 THEN pipe ROW(substr(l_list,1,l_idx-1)); l_list := substr(l_list,l_idx+LENGTH(p_del)); ELSE pipe ROW(l_list); exit; END IF; END loop; RETURN; END split;
Código:
esto necesito implementarlo para un cursor algo asi:select * from table(split('uno;dos;tres'));
Código:
pero todo mal no logro controlar la columna column_value. Eso muchas graciasdeclare email1 ppl_origen.email%type; TYPE correos IS TABLE OF varchar2(32767); posicion_inicio number := 0; l_text char := ';'; cadena varchar2(50); cursor busca is select email, rowid FROM ppl_origen where email like '%;%' and rownum <= 2; begin FOR busca_1 IN busca LOOP posicion_inicio := INSTR(busca_1.email, l_text); if (posicion_inicio>0) then select column_value into correos from table(split(busca_1.email)); FOR i IN correos.FIRST..correos.LAST LOOP dbms_output.put_line(correos(i)); END LOOP; end if; end loop; end;