[firebase-br] Trigger para definir o valor de uma coluna para 0 (zero) ao atualizar o registro
Fernando Pereira
fernandotoosp em gmail.com
Seg Fev 20 10:55:06 -03 2017
Bom dia, amigos.
Desculpe recorrer à lista para uma necessidade aparentemente simples, mas
pesquisei por muito tempo e fiz várias tentativas, e não ainda consegui.
Preciso saber quais os registros que ainda não "subiram" para a nuvem, e
também os que foram editados após o upload. Assim, fiz uma TRIGGER para
setar o campo para 0, sempre que o registro for alterado.
Estou usando o Firebird 3.0.1
Abaixo, os scripts que escrevi. O que será que está errado? Agradeço
qualquer dica/sugestão.
-- Criação da tabela
CREATE TABLE CAMPANHA (
ID_CAMPANHA INTEGER NOT NULL,
DS_CAMPANHA VARCHAR(150) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
CD_TIPO_CAMPANHA SMALLINT DEFAULT 1,
DT_CAMPANHA_INICIO DATE,
DT_CAMPANHA_FINAL DATE,
ST_UPDATE_WEB SMALLINT DEFAULT 0,
CONSTRAINT PK_CAMP PRIMARY KEY (ID_CAMPANHA)
);
---- Definindo generator e triggers
CREATE GENERATOR GEN_CAMPANHA_ID;
SET GENERATOR GEN_CAMPANHA_ID TO 0;
set TERM !! ;
CREATE TRIGGER CAMPANHA_BI FOR CAMPANHA ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN IF (NEW.ID_CAMPANHA IS NULL) THEN NEW.ID_CAMPANHA =
GEN_ID(GEN_CAMPANHA_ID, 1); END !!
CREATE TRIGGER CAMPANHA_BU FOR CAMPANHA ACTIVE BEFORE UPDATE POSITION 0 AS
BEGIN IF (NEW.ST_UPDATE_WEB IS NULL) THEN NEW.ST_UPDATE_WEB = 0; END !!
set TERM ; !!
----Inserindo um registro teste
INSERT INTO CAMPANHA (DS_CAMPANHA, CD_TIPO_CAMPANHA, DT_CAMPANHA_INICIO,
DT_CAMPANHA_FINAL) VALUES ('TESTE CAMPANHA 1', 1, '2017-01-01',
'2017-01-15');
----Simulando o envio do registro para o servidor na nuvem, onde quero que
o campo ST_UPDATE_WEB seja setado para '1'
UPDATE CAMPANHA SET ST_UPDATE_WEB = 1 WHERE ID_CAMPANHA = 1;
---- Ao fazer qualquer UPDATE no registro, quero que o campo ST_UPDATE_WEB
seja setado novamente para '0' (o que não acontece)
UPDATE CAMPANHA SET DT_CAMPANHA_FINAL = '2017-01-20' WHERE ID_CAMPANHA = 1;
Mais detalhes sobre a lista de discussão lista