Chiapa eu tinha feito da forma **franciscana** que você falou.

Fiz uma lógica bem simples, sei que não é a melhor, porém como eu estava com
uma certa urgência, desenvolvi dessa forma.
No meu caso ele pega cada linha de um campo string e posteriormente insere
em uma tabela.


DECLARE
   var_qtd_caracter PLS_INTEGER;
   var_posicao_anterior PLS_INTEGER;
   var_posicao_atual PLS_INTEGER;
BEGIN

   var_posicao_anterior:=0;
   var_posicao_atual := 0;
   FOR varre IN(SELECT translate(nome_do_campo,chr(10)||chr(13),'|')||'|'
nome_do_campo,
                       length(translate(nome_do_campo,chr(10)||chr(13),'|'))
- length(replace(translate(nome_do_campo,chr(10)||chr(13),'|'),'|',''))+1
qtd_enter
                  FROM noe_da_tabela
                 WHERE instr(nome_do_campo,chr(10)) >0)
   LOOP

      FOR enter IN 1..varre.qtd_enter
      LOOP
         IF(enter = 1)THEN

            INSERT
              INTO enter_teste
            VALUES
(replace(substr(varre.nome_do_campo,1,instr(varre.nome_do_campo,'|',1,1)),'|','')
                   );
          COMMIT;
        ELSE

            var_posicao_anterior :=
instr(varre.nome_do_campo,'|',1,enter-1);
            var_posicao_atual :=
instr(varre.nome_do_campo,'|',1,enter)-instr(varre.nome_do_campo,'|',1,enter-1);


            INSERT
              INTO enter_teste
            VALUES (varre.bad_codigo_beneficio,

replace(substr(varre.nome_do_campo,var_posicao_anterior,var_posicao_atual),'|',''));

         COMMIT;
         END IF;
      END LOOP;
   END LOOP;
END;


-- 
Atenciosamente
Francisco Porfirio Ribeiro Neto


[As partes desta mensagem que não continham texto foram removidas]

Responder a