Erro em Variável em Trigger
20/11/2004
0
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
Posts
20/11/2004
Afarias
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+
20/11/2004
Tap_pedroso
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.
20/11/2004
Tap_pedroso
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?
22/11/2004
Afarias
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+
Clique aqui para fazer login e interagir na Comunidade :)