[firebase-br] Trigger para definir o valor de uma coluna para, 0 (zero) ao atualizar o registro

Carlos Andrade krlosgilson em gmail.com
Seg Fev 20 12:29:48 -03 2017


No trigger CAMPANHA_BU, apenas altere a linha "IF (NEW.ST_UPDATE_WEB IS 
NULL) THEN NEW.ST_UPDATE_WEB = 0;" para "NEW.ST_UPDATE_WEB = 0;"

Da forma que está, a atualização não estão ocorrendo pela condição "IF" 
presente.

Em 20/02/2017 10:55, Fernando Pereira escreveu:
> 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