[firebase-br] RES: Trigger com campo não presente na sql

Kelver Merlotti kmerlotti em gmail.com
Qui Jun 17 17:21:31 -03 2010


Eu, o programador! :-)
É assim: eu não posso repassar todos os lugares do sistema que dão
update/insert nessa tabela, mas eu tenho certeza que nenhum destes
lugares alimentam o campo CODIGO, pois ele foi criado agora, por uma
rotina externa ao software.
Porém essa rotina é que vai alimentar este novo campo, de acordo com a
necessidade, portanto, posso garantir que nunca será enviado o mesmo
valor armazenado nele para um update! ;-)
Abraço!

Kelver Merlotti
Coordenador Editorial do Portal www.ActiveDelphi.com.br
Contato: kelver em activedelphi.com.br
Google: kmerlotti em gmail.com
Twitter: http://twitter.com/kmerlotti
Tem um segundo? Então, dá uma olhadinha nisso:
Um site de publicidades, de Portugal, está pagando em euros (quase 3x
mais que em reais) pra quem estiver disposto a:
 * Ler anúncios
 * Visitar sites
 * Clicar em banners
 * Navegar na NET
 * Ler e-mails
 * Convidar novos usuários
O pagamento pode ser feito de várias formas!
Registra lá. Não custa nada!!! ;-)
http://www.publipt.com/pages/index.php?refid=kmerlotti



2010/6/17 Sandro <sandro_rebelo em ibest.com.br>:
> Com certeza.
> Se fosse falasse isso, ja teria tido a resposta.
>
> Mas quem garante que um codigo naum vai ser atualizado com o mesmo codigo?
>
> Sandro
>
> ----- Original Message ----- From: "Kelver Merlotti" <kmerlotti em gmail.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Thursday, June 17, 2010 9:30 AM
> Subject: Re: [firebase-br]RES: Trigger com campo não presente na sql
>
>
> Opa, achei a saída!
>
> Quando um campo não está na instrução sql, o FB assume que o NEW.CAMPO
> é igual ao OLD.CAMPO, logo, a trigger ficou:
>
> begin
>  IF (NEW.CODIGO = OLD.CODIGO) THEN
>   NEW.CODIGO = 0;
> end
>
> Aí você pode falar: mas se você fizer "UPDATE TABELA SET CODIGO = 10
> WHERE CODIGO = 10" seu código vai zerar, não vai?
>
> Sim, vai! Mas nenhum update fará atualização do registro preenchendo o
> campo CODIGO com o mesmo valor que já está nele, portanto, não haverá
> problema de zerar quem não deve.
>
> Obrigado a todos pela ajuda.
>
> ps: é impressionante como agente perde tanto tempo com coisas tão
> "tontas", né não?! :\ rsrs
>
> Kelver Merlotti
> Coordenador Editorial do Portal www.ActiveDelphi.com.br
> Contato: kelver em activedelphi.com.br
> Google: kmerlotti em gmail.com
> Twitter: http://twitter.com/kmerlotti
> Tem um segundo? Então, dá uma olhadinha nisso:
> Um site de publicidades, de Portugal, está pagando em euros (quase 3x
> mais que em reais) pra quem estiver disposto a:
> * Ler anúncios
> * Visitar sites
> * Clicar em banners
> * Navegar na NET
> * Ler e-mails
> * Convidar novos usuários
> O pagamento pode ser feito de várias formas!
> Registra lá. Não custa nada!!! ;-)
> http://www.publipt.com/pages/index.php?refid=kmerlotti
>
>
>
> 2010/6/17 Kelver Merlotti <kmerlotti em gmail.com>:
>>
>> Bom dia, Sr. Alysson "F7"!
>> Como já comentei, mudar a programação onde as instruções são
>> executadas é impossível.
>> Já sobre utilizar SP poderia dar alguma sugestão sobre como seria a
>> procedure?
>> Será mesmo que não tem outra alternativa pra saber se o campo está ou
>> não na instrução UPDATE/INSERT ?
>> Obrigado e fico no aguardo de mais alguma sugestão da lista.
>>
>> Kelver Merlotti
>> Coordenador Editorial do Portal www.ActiveDelphi.com.br
>> Contato: kelver em activedelphi.com.br
>> Google: kmerlotti em gmail.com
>> Twitter: http://twitter.com/kmerlotti
>> Tem um segundo? Então, dá uma olhadinha nisso:
>> Um site de publicidades, de Portugal, está pagando em euros (quase 3x
>> mais que em reais) pra quem estiver disposto a:
>> * Ler anúncios
>> * Visitar sites
>> * Clicar em banners
>> * Navegar na NET
>> * Ler e-mails
>> * Convidar novos usuários
>> O pagamento pode ser feito de várias formas!
>> Registra lá. Não custa nada!!! ;-)
>> http://www.publipt.com/pages/index.php?refid=kmerlotti
>>
>>
>>
>> 2010/6/17 Alysson Azevedo <agalysson em gmail.com>:
>>>
>>> vi duas possibilidades, vc trata via programação, a sql pra nos momentos
>>> que
>>> nao "mencionar" o codigo, a rotina inclua um update codigo = 0... mais ai
>>> cai na sua restrição sobre não poder sempre colocar com 0 em valor
>>> padrão...
>>>
>>> outra coisa seria se vc pudesse criar uma sp que trate isso... talvez
>>> resolva...
>>> --
>>>
>>> Alysson Gonçalves de Azevedo
>>> (11) 8491-7730
>>>
>>> (\(''^_^ )/)
>>>
>>> "Pobre vive dizendo que não tem nada, mas quando vem a enchente, ele sai
>>> gritando: -Perdi tudo!!!"
>>>
>>>
>>>
>>>
>>> Em 17 de junho de 2010 08:12, Kelver Merlotti
>>> <kmerlotti em gmail.com>escreveu:
>>>
>>>> Eduardo Pombo: DEFAULT é útil somente no INSERT e no caso, preciso
>>>> dele também para o UPDATE. De qualquer forma, obrigado pela força. ;)
>>>>
>>>> Sandro: Exatamente! Independente do valor que já estiver no campo
>>>> CODIGO, se este campo for mensionado no UPDATE/INSERT, devo respeitar
>>>> o valor que está vindo na instrução, caso contrário - campo CODIGO não
>>>> presente na instrução - o valor dele deve passar para zero.
>>>>
>>>> Abraço!
>>>>
>>>> Kelver Merlotti
>>>> Coordenador Editorial do Portal www.ActiveDelphi.com.br
>>>> Contato: kelver em activedelphi.com.br
>>>> Google: kmerlotti em gmail.com
>>>> Msn: kmerlotti em hotmail.com
>>>> Twitter: http://twitter.com/kmerlotti
>>>> Tem um segundo? Então, dá uma olhadinha nisso:
>>>> Um site de publicidades, de Portugal, está pagando em euros (quase 3x
>>>> mais que em reais) pra quem estiver disposto a:
>>>> * Ler anúncios
>>>> * Visitar sites
>>>> * Clicar em banners
>>>> * Navegar na NET
>>>> * Ler e-mails
>>>> * Convidar novos usuários
>>>> O pagamento pode ser feito de várias formas!
>>>> Registra lá. Não custa nada!!! ;-)
>>>> http://www.publipt.com/pages/index.php?refid=kmerlotti
>>>>
>>>>
>>>>
>>>> 2010/6/16 Sandro <sandro_rebelo em ibest.com.br>:
>>>> > Ola, uma duvida para poder ajudá-lo
>>>> >
>>>> > Se o campo código já conter um valor, exemplo: 20
>>>> >
>>>> > E se o update não fizer menção ao campo código, mesmo assim vc quer >
>>>> > que
>>>> ele
>>>> > passe de 20 para 0 ?
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > -----Mensagem original-----
>>>> > De: lista-bounces em firebase.com.br >
>>>> > [mailto:lista-bounces em firebase.com.br]
>>>> Em
>>>> > nome de Kelver Merlotti
>>>> > Enviada em: quarta-feira, 16 de junho de 2010 18:15
>>>> > Para: FireBase
>>>> > Assunto: [firebase-br] Trigger com campo não presente na sql
>>>> >
>>>> > Fala galera, boa noite!
>>>> > Já perdi algumas horinhas brincando com isso e não consegui resolver.
>>>> > Por favor, antes de responder dizendo que eu estou maluco (rs),
>>>> > reproduzam aí pra ter certeza que funcionou:
>>>> >
>>>> > CREATE TABLE TESTE(
>>>> > CODIGO INTEGER NOT NULL,
>>>> > NOME VARCHAR(10))
>>>> >
>>>> > INSERT INTO TESTE VALUES (10, 'TESTE')
>>>> >
>>>> > CREATE OR ALTER TRIGGER TESTE_BIU0 FOR TESTE
>>>> > ACTIVE BEFORE INSERT OR UPDATE POSITION 0
>>>> > AS
>>>> > begin
>>>> > IF (NEW.CODIGO IS NULL) THEN
>>>> > NEW.CODIGO = 0;
>>>> > end
>>>> >
>>>> > O x da questão é: se nesse momento eu fizer ...
>>>> >
>>>> > UPDATE TESTE SET NOME = 'ABC' WHERE NOME = 'TESTE'
>>>> >
>>>> > ... preciso que o CODIGO seja igual a 0 (zero), ou seja, se o campo
>>>> > CODIGO não estiver no UPDATE / INSERT, preciso que ele passe para
>>>> > zero.
>>>> >
>>>> > Porém, se eu fizer...
>>>> >
>>>> > UPDATE TESTE SET NOME = 'ABC', CODIGO = 10 WHERE NOME = 'TESTE'
>>>> >
>>>> > ... aí tenho que respeitar o valor que está vindo no comando, ou seja,
>>>> > o código seria realmente 10 e não 0 (zero)!
>>>> >
>>>> > Obs.: NÃO há possibilidade, "em hipótese alguma", de eu poder alterar
>>>> > o primeiro update pra sempre passar um valor padrão para o campo
>>>> > CODSINC e comparar na trigger se está vindo este valor padrão. A
>>>> > necessidade realmente é saber se veio ou não o campo na instrução sql
>>>> > de update ou insert.
>>>> >
>>>> > Taí.. espero uma luz, já antecipando meus agradecimentos.
>>>> >
>>>> > Abraços galera!
>>>> >
>>>> > Kelver Merlotti
>>>> > Coordenador Editorial do Portal www.ActiveDelphi.com.br
>>>> > Contato: kelver em activedelphi.com.br
>>>> > Google: kmerlotti em gmail.com
>>>> > Twitter: http://twitter.com/kmerlotti
>>>> > Tem um segundo? Então, dá uma olhadinha nisso:
>>>> > Um site de publicidades, de Portugal, está pagando em euros (quase 3x
>>>> > mais que em reais) pra quem estiver disposto a:
>>>> > * Ler anúncios
>>>> > * Visitar sites
>>>> > * Clicar em banners
>>>> > * Navegar na NET
>>>> > * Ler e-mails
>>>> > * Convidar novos usuários
>>>> > O pagamento pode ser feito de várias formas!
>>>> > Registra lá. Não custa nada!!! ;-)
>>>> > http://www.publipt.com/pages/index.php?refid=kmerlotti
>>>> >
>>>> > ______________________________________________
>>>> > 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
>>>
>>
>
> ______________________________________________
> 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