Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/07/2012, 15:13
maurimono
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
Información FUNCTION split

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
__________________
Dios es mas grande que tu problema :-)