[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:42:12 -03 2017


Tenta isso então:

IF (NEW.ST_UPDATE_WEB=1) THEN NEW.ST_UPDATE_WEB = 0;

Abraços!



Em 20 de fevereiro de 2017 11:24, Fernando Pereira <fernandotoosp em gmail.com>
escreveu:

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