Erro em Variável em Trigger

20/11/2004

0

olá pessoa,

estou fazendo a seguinte trigger em uma tabela no evento before insert:

AS
DECLARE VARIABLE MES CHAR(2);
DECLARE VARIABLE ANO CHAR(4);
DECLARE VARIABLE CORTE CHAR(2);
DECLARE VARIABLE VENC CHAR(2);
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE DTCORTE DATE;
DECLARE VARIABLE NREGISTRO SMALLINT;
BEGIN
 FOR SELECT COUNT(*) AS REGISTROS FROM TABFATURAS FT WHERE FT.NTITULAR=NEW.NCARD
 AND FT.FECHADA=0 INTO :NREGISTRO DO
 BEGIN
 IF (NREGISTRO > 0) THEN
  BEGIN
   IF (NEW.TIPO=´D´) THEN
    BEGIN
     UPDATE TABFATURAS SET DEBITO=DEBITO + NEW.VALOR WHERE NTITULAR=NEW.NCARD AND FECHADA=0;
     UPDATE TABFATURAS SET SALDOFATURA=SALDOFATURA + NEW.VALOR WHERE NTITULAR=NEW.NCARD AND FECHADA=0;
    END
     ELSE IF (NEW.TIPO=´C´) THEN
      BEGIN
       UPDATE TABFATURAS SET CREDITO=CREDITO + NEW.VALOR WHERE NTITULAR=NEW.NCARD AND FECHADA=0;
       UPDATE TABFATURAS SET SALDOFATURA=SALDOFATURA - NEW.VALOR WHERE NTITULAR=NEW.NCARD AND FECHADA=0;
     END
  END
  ELSE IF (NREGISTRO <= 0) THEN
   BEGIN
   FOR SELECT CLI.DIACORTE,CLI.DIAVENCIMENTO FROM TABCLIENTES CLI WHERE
    NCARTAO=NEW.NCARD INTO :CORTE,:VENC DO
    BEGIN
     for select extract(month from current_date) from rdb$database into :MES do
     for select extract(year from current_date) from rdb$database into :ANO do
      BEGIN
       DATA=VENC+´/´+MES+´/´+ANO;
       DTCORTE=CORTE+´/´+MES+´/´+ANO;
      END
     INSERT INTO TABFATURAS(NTITULAR,VENCIMENTO,SALDOANT,PGTOANT,SALDOREMAN,
     SALDOFATURA,PGTOMIN,PAGO,FECHADA,VRPAGO,DATAPROC,DEBITO,CREDITO,DATAPGTO)
     VALUES(NEW.NCARD,[i]DATA+30[/i],0,0,0,NEW.VALOR,0,0,0,0,[i]DTCORTE+30[/i],NEW.VALOR,0);
    END
   END
 END
END ^


quando eu compilo ele dá o seguinte erro indicando a variavel data no [b:01c463c7bd]insert into[/b:01c463c7bd]:

ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -206
Column unknown
DATA
At line 40, column 23.


o valor q atribui a variavel está errada ou o q?


Tap_pedroso

Tap_pedroso

Responder

Posts

20/11/2004

Afarias

toda variável quando usada em um comando SQL deve ser precedida por : (dois-pontos), de forma que::


INSERT INTO TABFATURAS (NTITULAR, VENCIMENTO, SALDOANT, 
  PGTOANT, SALDOREMAN, SALDOFATURA, PGTOMIN, PAGO, FECHADA,
  VRPAGO, DATAPROC, DEBITO, CREDITO, DATAPGTO) 
VALUES (NEW.NCARD, :DATA+30, 0, 0, 0, NEW.VALOR, 0, 0, 0, 0, 
  :DTCORTE+30, NEW.VALOR, 0); 



T+


Responder

20/11/2004

Tap_pedroso

OK,
eu coloquei os (:pontos) e ele me deu o erro:

ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
expression evaluation not supported


eu tentei tirar o +30 e deixar só DATA mas não dá. será q código eu estou criando ou atribuindo valores inválidos para as vaiáveis pq se eu comentar a linha:

[b:efd61256ba] BEGIN
DATA=VENC+´/´+MES+´/´+ANO;
DTCORTE=CORTE+´/´+MES+´/´+ANO;
END[/b:efd61256ba]

e tirar os campo :DATA E :CORTE Q são variáveis ele compila.

obrigado afarias.


Responder

20/11/2004

Tap_pedroso

ACHEI O PROBLEMA ELE ESTÁ EM:

BEGIN
DATA=VENC+´/´+MES+´/´+ANO;
DTCORTE=CORTE+´/´+MES+´/´+ANO;
END

AS VARIÁVEIS DATA E DTCORTE SÃO DO TIPO DATE SÓ Q EU NÃO CONSEGU CONVERTER OS VALORES COM CAST ALGUEM SABE UM COMANDO PARA CONVERTER VENC+´/´+MES+´/´+ANO DE STRING PARA DATA?


Responder

22/11/2004

Afarias

1) o operador de concatenação no IB/FB é ||
2) dd/mm/aa não é um formato de data válido, use mm/dd/aa (ou dd.mm.yy)
3) use um CAST para transformar a ´string´ em data

ex:

DATA = CAST(MES||´/´||VENC||´/´||ANO AS DATE);


T+


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar