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

Kelver Merlotti kmerlotti em gmail.com
Qua Jun 16 18:14:32 -03 2010


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




Mais detalhes sobre a lista de discussão lista