Fórum Ajuda com Stored Procedure (minha primeira!) #55633

28/03/2006

0

Galera,

Depois de muito ler e pesquisar (seja aqui no fórum, seja na Internet) consegui montar minha primeira stored procedure (sp). O problema é que ainda não consegui resolver tudo nela. O código dela é:

CREATE PROCEDURE GERA_FALTA (
   DATAINI DATE,
   DATAFIM DATE
   )
AS
   DECLARE VARIABLE DATAMINHA DATE;
BEGIN

   DATAMINHA = :DATAINI;

   WHILE (DATAMINHA <= :DATAFIM) DO
   BEGIN
   
      INSERT INTO TMP_FALTAS
      SELECT DISTINCT DATAMINHA AS DATA, HORARIO.MATRICULA
      FROM HORARIO
      WHERE HORARIO.MATRICULA NOT IN
      (SELECT MATRICULA
         FROM PRESENCA
        WHERE DATA = DATAMINHA)
      AND DIA = (EXTRACT(WEEKDAY FROM DATAMINHA)+1)
      ORDER BY HORARIO.MATRICULA;
      
      DATAMINHA = DATAMINHA + 1;

      SUSPEND;
   END

END


Como podem notar eu passo [b:c9b288aa5a]duas datas de parâmetro [/b:c9b288aa5a]e executo um [b:c9b288aa5a]WHILE [/b:c9b288aa5a]até a variável [b:c9b288aa5a]DATAMINHA[/b:c9b288aa5a], que inicialmente tem o valor de DATAINI, [b:c9b288aa5a]seja incrementada até a DATAFIM[/b:c9b288aa5a].

O problema é que quando executo isso no Firebird recebo a mensagem:

Column does not belong to referenced table.Dynamic SQL Error.
SQL error code = -206.
Column unknown.
DATAMINHA.
At line 19, column 22.


Como eu corrijo isso? Onde eu estou errando? Já li o link [url]http://community.borland.com/article/0,1410,27197,00.html[/url] (introdução a sp do Interbase) e mesmo assim não consegui descobrir o problema.

Alguma idéia?



Willian Lopes


Willian

Willian

Responder

Posts

28/03/2006

Emerson Nascimento

o correto é:
CREATE PROCEDURE GERA_FALTA ( 
   DATAINI DATE, 
   DATAFIM DATE 
   ) 
AS 
   DECLARE VARIABLE DATAMINHA DATE; 
BEGIN 

   DATAMINHA = :DATAINI; 

   WHILE (DATAMINHA <= :DATAFIM) DO 
   BEGIN 
    
      INSERT INTO TMP_FALTAS 
      SELECT DISTINCT DATAMINHA AS DATA, HORARIO.MATRICULA 
      FROM HORARIO 
      WHERE HORARIO.MATRICULA NOT IN 
      (SELECT MATRICULA 
         FROM PRESENCA 
        WHERE DATA = :DATAMINHA) 
      AND DIA = (EXTRACT(WEEKDAY FROM DATAMINHA)+1) 
      ORDER BY HORARIO.MATRICULA; 
      
      DATAMINHA = DATAMINHA + 1; 

      SUSPEND; 
   END 
END

você havia deixado de colocar o ´:´ (dois pontos) em ´WHERE DATA = DATAMINHA´ (olhe o código acima).
o fato é que DATAMINHA se referencia a um campo, que não existe na tabela, e :DATAMINHA é um parâmetro, que vai utilizar o valor da sua variável.


Responder

Gostei + 0

29/03/2006

Willian

Obrigado pela ajuda, emerson.en.

Fiz a mudança sugerida, embora após ela ocorreram outros problemas que eu resolvi (baseado na sua dica) e consegui compilar, mas não consegui o resultado desejado, por isso fiz um novo post. Mas obrigado, sua dica foi muito útil.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar