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

Sandro sandro_rebelo em ibest.com.br
Qui Jun 17 16:50:57 -03 2010


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 





Mais detalhes sobre a lista de discussão lista