[firebase-br] Old or new

W O sistemas2000profesional em gmail.com
Qua Nov 6 01:49:54 -03 2013


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



Mais detalhes sobre a lista de discussão lista