[firebase-br] Old or new

José Mauricio Barbisan Zottis bzottis em ig.com.br
Qua Nov 6 08:39:33 -03 2013


obrigado Walter,ajudou muito.




Em 6 de novembro de 2013 01:49, W O <sistemas2000profesional em gmail.com>escreveu:

> Puedes leer estos dos artículos, creo que te ayudarán a conseguir lo que
> quieres:
>
>
> http://firebird21.wordpress.com/2013/05/24/registrando-los-cambios-realizados-a-los-datos-de-una-tabla/
>
>
> http://firebird21.wordpress.com/2013/05/24/otro-ejemplo-de-trigger-de-actualizacion/
>
> Saludos.
>
> Walter.
>
>
>
> 2013/11/5 W O <sistemas2000profesional em gmail.com>
>
> > Si en tu INSERT no especificas el valor de una columna hay dos
> > posibilidades:
> >
> > 1. Si esa columna tiene definido un valor DEFAULT, entonces ese valor
> será
> > insertado
> > 2. Si esa columna no tiene definido un valor DEFAULT, entonces NULL será
> > insertado
> >
> > En un trigger BEFORE INSERT no existen las seudovariables OLD, así que no
> > puedes usarlas.
> >
> > En un trigger BEFORE UPDATE sí existen las seudovariables OLD y también
> > las seudovariables NEW.
> >
> > En un trigger BEFORE UPDATE, si no se cambió el valor de una columna NEW
> > siempre será igual a OLD.
> >
> > Por lo tanto, si escribes:
> > INSERT INTO MiTabla (Columna1, Columna2, Columna3, ...) VALUES
> > (NEW.Columna1, NEW.Columna2. NEW.Columna3, ...)
> >
> > *todas* las columnas serán insertadas, no solamente las que tengan
> > valores NEW y OLD diferentes.
> >
> > Saludos.
> >
> > Walter.
> >
> >
> >
> >
> > 2013/11/5 José Mauricio Barbisan Zottis <bzottis em ig.com.br>
> >
> >> Obrigado Walter, na verdade sei que old é o valor velho e new o valor
> >> alterado, mas a situação é a seguinte;
> >> tenho um replicador para um site
> >> e tenho que monitorar alguns campos de algumas tabelas para ver se não
> >> houve alteração, se tiver sido alterado ou inserido novo Cliente, por
> >> exemplo, cadastro em uma outra tabela, e essa outra tabela é varrida e
> >> replicada para o site, depois o registro é apagado da tabela de
> >> replicação.
> >>
> >> então, a tabela cliente tem muitos campos, e o código para verificar se
> >> houve alteração( if new.campo <> old.campo) seria gigantesco.
> >>
> >> por isso pensei em fazer sempre o new, mas daí seria inserido somente
> >> campos que tiveram alterações ou todos os campos?
> >>
> >>
> >>
> >>
> >> 2013/11/5 W O <sistemas2000profesional em gmail.com>
> >>
> >> > Las pseudo variables OLD y NEW se utilizan solamente dentro de los
> >> > triggers. Te permiten conocer cual era el valor "antes" de la
> >> actualización
> >> > y el valor actual, el que se quiere guardar.
> >> >
> >> > En tu INSERT solamente es obligatorio especificar el valor de las
> >> columnas
> >> > que están declaradas como NOT NULL. Las columnas que pueden contener
> >> NULL
> >> > no es necesario especificarlas (pero si no las especificas se guardará
> >> NULL
> >> > en ellas).
> >> >
> >> > No necesitas verificar que una columna haya cambiado su valor para
> >> > guardarla. Siempre lo que se guardará será el contenido de la
> >> > pseudovariable NEW
> >> >
> >> > O sea que escribir dentro de un trigger:
> >> > INSERT INTO MiTabla (Columna1, Columna2, Columna3) VALUES
> (NEW.Columna1,
> >> > NEW.Columna2, NEW.Columna3)
> >> >
> >> > es perfectamente válido.
> >> >
> >> > Desde luego que "MiTabla" es otra tabla, no la que corresponde al
> >> trigger.
> >> >
> >> > Saludos.
> >> >
> >> > Walter.
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > 2013/11/5 José Mauricio Barbisan Zottis <bzottis em ig.com.br>
> >> >
> >> > > Pessoal, to com uma dúvida boba, mas surgiu....
> >> > >
> >> > > Preciso cadastrar em uma outra tabela o cliente que sofreu
> >> > alteração(Quase
> >> > > todos os campos)
> >> > >
> >> > > é preciso fazer a distinção entre o new e o old para pegar o valor
> ou
> >> > posso
> >> > > colocar ctudo como new/
> >> > >
> >> > > exemplo;
> >> > > Consideremos que o campo razao_social não foi alterado e o campo
> >> > > Nome_fantasia foi. Poderia fazer direto assim:
> >> > >
> >> > > insert into clientes(cod_cliente, Razao_social,
> >> > > nome_fantasia)values(new.cod_cliente, new.razao_social,
> >> > new.nome_fantasia)
> >> > > pois senão precisarei fazer a verificação de um monte de campos.
> >> > >
> >> > > obrigado
> >> > > ______________________________________________
> >> > > 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://firebase.com.br/pesquisa
> >> > >
> >> > ______________________________________________
> >> > 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://firebase.com.br/pesquisa
> >> >
> >> ______________________________________________
> >> 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://firebase.com.br/pesquisa
> >>
> >
> >
> ______________________________________________
> 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://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista