[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:50:19 -03 2017


Tentei, e não deu certo.
Desta forma, eu nunca consigo definir o valor do campo como "1"

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

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