Hola, tengo una tabla con correos separados por ";" y necesito hacer un registro con cada uno de los correos. Por ahi me encontre una funcion que me permite separar por algun caracter.
Código:
create or replace type split_tbl as table of varchar2(32767);
Código:
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;
luego puedo hacer:
Código:
select * from table(split('uno;dos;tres'));
esto necesito implementarlo para un cursor algo asi:
Código:
declare
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;
pero todo mal no logro controlar la columna column_value. Eso muchas gracias