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

Renato Felix de Almeida renatofelixalmeida em gmail.com
Seg Fev 20 11:07:42 -03 2017


Na linha
IF (NEW.ST_UPDATE_WEB IS NULL) THEN NEW.ST_UPDATE_WEB = 0;

Você está verificando se o campo é nulo antes de definir para zero. Existe
algum procedimento no seu sistema que define esse campo para nulo? Se
marcar para zero tiver que ocorrer em qualquer alteração basta retirar o if
colocando apenas:
NEW.ST_UPDATE_WEB = 0;

Abraços!

Em 20 de fevereiro de 2017 10:55, Fernando Pereira <fernandotoosp em gmail.com>
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;
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://www.firebase.com.br/
> pesquisa_lista.html
>



-- 
Renato
renatofelixalmeida em gmail.com



Mais detalhes sobre a lista de discussão lista