CURSOR POPULANDO TABELA BASE TABLE VIA LOOP

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Olá pessoal, não encontrei no fórum algum post que me ajudasse, então segue a minha dúvida:
Eu tenho um sql que deverá alimentar uma tabela do banco. Apesar de o cursor retornar valor, ele não está gravando os dados na tabela. Alguém pode me dizer o que estou fazendo errado e a forma correta de fazer funcionar?.
Agradeço toda ajuda! :)
Segue o código que fiz?

Selecionar tudo

PROCEDURE INSERE_ORDERS IS

        CURSOR C1 IS 
        SELECT ORDERS, DTAEMI, CODPOR,
               OPEBCO, DESBCO, DTACRE,
               VLRPGT, VLRTIT, VLRABA,
               VLRJUR, VLRABE, VLRCOM,
               VLRCPG, EMIMES, PERORDER          
        FROM V_ORDENS_GERAIS V;             
BEGIN
    
   FORMS_DDL('TRUNCATE TABLE T_DADOS');  

     FOR C IN C1 LOOP
        INSERT INTO T_DADOS VALUES (   C.ORDERS,             
                                       C.DTAEMI,                                        
                                       C.CODPOR,                           
                                       C.OPEBCO,                           
                                       C.DESBCO,                        
                                       C.DTACRE,                         
                                       C.VLRPGT,                          
                                       C.VLRTIT,                           
                                       C.VLRABA,                           
                                       C.VLRJUR,                  
                                       C.VLRABE,                         
                                       C.VLRCOM,                         
                                       C.VLRCPG,                         
                                       C.EMIMES,                          
                                       C.PERORDER );       
            NEXT_RECORD;
            EXIT WHEN C.ORDERS IS NULL;
                                      
     END LOOP;
     
        :SYSTEM.MESSAGE_LEVEL := 10;
         COMMIT;
        :SYSTEM.MESSAGE_LEVEL := 0;   
END;
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 318
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

djoq,

Vou fazer uma pergunta obvia, mas apenas para tirar minha dúvida. Você está utilizando o Oracle Forms correto? É porque eu nunca utilizei esta ferramenta.

No entanto para efeito de testes, já tentou criar um bloco anônimo e tentar inserir os dados sem o uso da condicional "EXIT WHEN" e por hora omita (desabilite) as mensagens "SYSTEM.MESSAGE_LEVEL".

Outra coisa, essas tabelas não são temporárias, nem views?

Estou sugerindo isso, porque dentro da declaração implicita do cursor já existe um incrementador automático a cada interação do looping e para tentar por eliminação, descartar o possibilidade da condicional estar sendo testada na primeira interação antes de estar sendo carregado o dataset com os dados.

Para utilizar um bloco anônimo basta você declarar o seguinte bloco:

Selecionar tudo

BEGIN

DECLARE

END;
Copie e cole o código de sua procedure a faça os devidos ajustes.

Por favor, no momento tente isso até um dos companheiros do forum poder responder com mais certeza.

Desculpe-me não poder ajudar mais do que isso. De qualquer maneira espero ter ajudado.

Att.,
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Oi Tinho, sim é forms 6. Obrigada pela atenção, testei o que você sugeriu, não resolveu, mas apareceu um erro na hora de popular um campo data, pode ser formatos diferentes, entre o que traz no cursor e o que está na tabela. Vou continuar os testes, arrumando a data deve resolver.
Obrigada pelas dicas. :)
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes