Procedure com insert tabela do banco

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, 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

Oi pessoal, estou fazendo uma procedure pra alimentar uma tabela da base de dados.
Porém ao compilar o Forms6 me traz o seguinte erro nos campos da cláusula INTO: Bad bind variable NRPE.
Já conferi e o campo NRPE existe na tabela T_GERA_DADOS que recebe o insert.
Segue o código:

Selecionar tudo

PROCEDURE ALIMENTA_GERA_DADOS IS
    
AUX NUMBER(10);

BEGIN
    AUX := NULL;
    DELETE T_GERA_DADOS;
    
    GO_BLOCK('PEDIDOS');
    FIRST_RECORD;
    
    LOOP
        
	     SELECT DISTINCT N.CODCLIE, N.NRPE, N.CODIC,  TO_DATE(SUBSTR(:W_DATA_FORMATADA,1,10),'DD/MM/YYYY') DT
        INTO T_GERA_DADOS (:CODCLIE, :NRPE, :CODIC, :W_DATA_FORMATADA)
        FROM NOTAS_DE_SAIDA N
        WHERE N.NRPE = :PEDIDO.NRPE;
	     
	     IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
	        EXIT;
	     ELSE
	        NEXT_RECORD;
	     END IF;
	     
    END LOOP;   
    
    :SYSTEM.MESSAGE_LEVEL := 5;
    COMMIT;
    :SYSTEM.MESSAGE_LEVEL := 0;
    
    GO_BLOCK('PEDIDOS');
    
    SELECT MAX(NRPE) 
    INTO AUX
    FROM T_GERA_DADOS;
    
    IF AUX IS NOT NULL THEN
     MESSAGE(' AGUARDE...GERANDO O SEU RELATÓRIO...');	    	
     GERADOR_DE_RELATORIO;
    END IF;
END; 
carloscsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qui, 26 Jul 2012 8:55 am
" Pense diferente! - "

Boa tarde!

Você já usou esse processo antes? De colocar T_GERA_DADOS ... procedure ou função dentro de um INTO(select)?
Nunca tinha visto esse método. Pode ser esse o erro.

At.:
jacksonr81
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qui, 18 Jul 2013 6:07 pm

Boa tarde

O modo que você utilizou o "select ... into tabela", alterei para "Insert into tabela (campos) (select). Veja abaixo:
Avalie este código e veja se atende:

Obs: Vale observar também se o campo NRPE existe também na tabela NOTAS_DE_SAIDA, pois está sendo utilizada na cláusula.

Selecionar tudo

PROCEDURE alimenta_gera_dados IS

  aux NUMBER(10);

BEGIN
  aux := NULL;
  DELETE t_gera_dados;

  go_block('PEDIDOS');
  first_record;

  LOOP
  
     -- Seu select comentado
    /*SELECT DISTINCT N.CODCLIE, N.NRPE, N.CODIC,  TO_DATE(SUBSTR(:W_DATA_FORMATADA,1,10),'DD/MM/YYYY') DT
    INTO T_GERA_DADOS (:CODCLIE, :NRPE, :CODIC, :W_DATA_FORMATADA)
    FROM NOTAS_DE_SAIDA N
    WHERE N.NRPE = :PEDIDO.NRPE;*/
  
    -- Insert para substituir o select acima
    INSERT INTO t_gera_dados
      (codclie, nrpe, codic, w_data_formatada) -- aqui não necessita de : a frente do campo
      (SELECT DISTINCT n.codclie,
                       n.nrpe,
                       n.codic,
                       to_date(substr(:w_data_formatada, 1, 10), 'DD/MM/YYYY') dt
       FROM   notas_de_saida n
       WHERE  n.nrpe = :pedido.nrpe);
  
    IF :system.last_record = 'TRUE' THEN
      EXIT;
    ELSE
      next_record;
    END IF;
  
  END LOOP;

  :system.message_level := 5;
  COMMIT;
  :system.message_level := 0;

  go_block('PEDIDOS');

  SELECT MAX(nrpe) INTO aux FROM t_gera_dados;

  IF aux IS NOT NULL THEN
    message(' AGUARDE...GERANDO O SEU RELATÓRIO...');
    gerador_de_relatorio;
  END IF;
END;
Att.
Responder
  • Informação
  • Quem está online

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