[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 11:24:36 -03 2017


Obrigado pela resposta, Renato.

O problema é que eu preciso setar este campo para 1, logo após "subir" o
registro para a nuvem, para que seja desprezado nos próximos "uploads"
Se eu tirar o IF, a trigger irá definir este campo sempre como 0, em
qualquer update, mesmo que o update precise definir como 1.

Abraços

Em 20 de fevereiro de 2017 11:07, Renato Felix de Almeida <
renatofelixalmeida em gmail.com> escreveu:

> 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
> ______________________________________________
> 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
>



Mais detalhes sobre a lista de discussão lista