Trigger não aceita domínio

Firebird

05/10/2009

Colegas esta trigger não esta aceitando o dominio que eu passei, o dominio esta correto, tanto que eu usei
no campo de outras tabelas e não deu erro.
Mas quanto eu atribuio ele a uma variavel da o erro:

[b:fbd3c267a6]Error at line 1 - Dynamic SQL Error
SQL error code =-104
Token unknown - line 3, colunm 30
d_operacao_doc[/b:fbd3c267a6]

Poderiam me ajudar por favor, abaixo esta o codigo da trigger
abaixo o dominio que criei

D_OPERACAO_DOC = VARCHAR(1) CHECK ((VALUE IN( ´E´, ´S´)));


[b:fbd3c267a6]create trigger trg_itens_bi for itens before insert[/b:fbd3c267a6]
[b:fbd3c267a6]as[/b:fbd3c267a6]
declare variable v_operacao d_operacao_doc;
[b:fbd3c267a6]begin[/b:fbd3c267a6]
/* Trigger text */
select operacao
from documentos
where codigo = new.documento
into :v_operacao;

if (:v_operacao = ´E´) then
update produtos
set saldo = saldo + new.quantidade
where codigo = new.produto;

if (:v_operacao = ´S´) then
update produtos
set saldo = saldo - new.quantidade
where codigo = new.produto;
[b:fbd3c267a6]end[/b:fbd3c267a6]


Nlsouza

Nlsouza

Curtidas 0

Respostas

Afarias

Afarias

05/10/2009

Domínios só podem ser usados em triggers/procedures em bases de dados criadas com FB a partir da versão 2 (ou 2.1 não lembro) -- qual a versão da sua base (ODS) ?

T+


GOSTEI 0
Nlsouza

Nlsouza

05/10/2009

Estou usando o firebir 2.0.
Estou citando o problema do dominio, pq a função desta trigger é atualizar o campo SALDO na tabela produto e isso não esta acontecendo.
Na video aula da devmedia o autor construiu esta trigger no interbase 6 usando o ibconsole, ele atribuiu este dominio a variavel e deu certo. Eu baixei o interbase 6 e o ibconcole, mas quando atribui o dominio não deu certo. Se eu conseguir atualizar o campo SALDO é o que importa, senão naõ poderei continuar estudando.
Espero que tenha contibuido mais com as informaçoes.
Aguardo seu retorno
Obrigado.


GOSTEI 0
Afarias

Afarias

05/10/2009

|Estou usando o firebir 2.0.

Confirmei na documentação, só está disponível a partir do FB 2.1 (base de dados ODS 11.1)


|Estou citando o problema do dominio, pq a função desta trigger é
|atualizar o campo SALDO na tabela produto e isso não esta acontecendo.

Uma coisa não tem a ver com a outra. Defina a trigger sem o domínio e veja o q acontece. Outra coisa, sua Trigger é mais para AFTER insert do q BEFORE -- sugiro q faça essa mudança.

ex:

set term ^;

create trigger trg_itens_ai for itens AFTER insert 
as 
  declare variable v_operacao CHAR(1); 
begin 
  select operacao from documentos 
  where codigo = new.documento 
  into :v_operacao; 

  if (v_operacao = ´E´) then 
    update produtos 
    set saldo = saldo + new.quantidade 
    where codigo = new.produto; 

  if (v_operacao = ´S´) then 
    update produtos 
    set saldo = saldo - new.quantidade 
    where codigo = new.produto; 

end



|Na video aula da devmedia o autor construiu esta trigger no interbase 6
|usando o ibconsole, ele atribuiu este dominio a variavel e deu certo.

Impossível.


T+


GOSTEI 0
Afarias

Afarias

05/10/2009

esqueci o ^ no end final:

[b:7e08b6f8a8]end^[/b:7e08b6f8a8]


:roll:


T+


GOSTEI 0
Nlsouza

Nlsouza

05/10/2009

O acento não nada é pq copiei o codigo de dentro do IBExpert.
vou fazer o teste conforme me pediu.
Pelo que entendi é so fazer a alteração na trigger, não precisa baixar o firebir 2.1 para resolver meu problema?
Obrigado!


GOSTEI 0
Nlsouza

Nlsouza

05/10/2009

O acento não nada é pq copiei o codigo de dentro do IBExpert. vou fazer o teste conforme me pediu. Pelo que entendi é so fazer a alteração na trigger, não precisa baixar o firebird 2.1 para resolver meu problema? Obrigado!



GOSTEI 0
Afarias

Afarias

05/10/2009

|Pelo que entendi é so fazer a alteração na trigger, não precisa baixar o
|firebird 2.1 para resolver meu problema?

Isso. Vc só precisa do FB 2.1 se realmente quiser usar domínios nos códigos de triggers e stored procs. Mas isso não muda em nada o funcionamento da Trigger.



T+


GOSTEI 0
POSTAR