Fórum Trigger, é possível? #45797

03/08/2004

0

Tem, jeito de fazer um select, que retorna apenas um valor, numa tabela diferente da que o trigger está vinculado, e atribuir este valor a uma variável e usá-lo?

Tentei fazer isto mas não consegui.

Obrigado,

Roberto


Tenil

Tenil

Responder

Posts

03/08/2004

Afarias

sim... ex::

create trigger {...} 
as
  declare variable temp_value integer;
begin
   
  select campo_tal from alguma_tabela where codigo=new.codigo
  into :temp_value;

  new.algum_campo = temp_value;

end^



Responder

Gostei + 0

03/08/2004

Tenil

AFARIAS, olha só como ficou o código:

SET TERM ^ ;

CREATE TRIGGER "CRIAR_PRESTACOES" FOR "CARNE"
ACTIVE AFTER INSERT POSITION 0
AS
   DECLARE VARIABLE contador SMALLINT;
BEGIN
   SELECT NU_PRESTACOES FROM CARNE_TPO WHERE ID_TIPO_CARNE=NEW.ID_TIPO_CARNE INTO:contador;

   WHILE (contador > 0) DO
   BEGIN
      INSERT INTO CARNE_PRESTACOES
      (ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO, NU_PRESTACAO, IN_PAGO)
      VALUES (new.ID_CARNE, NULL, NULL, contador, 0);
      contador = contador - 1;
   END
END ^
COMMIT WORK ^
SET TERM ; ^


Ao meu ver este código está correto, mas quando mando executar ocorre o seguinte erro:
SQL erro code= -204 Table unknown CARNE_TIPO

Estou usando o IB 6.5.

Obrigado


Responder

Gostei + 0

03/08/2004

Afarias

|mas quando mando executar ocorre o seguinte erro:
|SQL erro code= -204 Table unknown CARNE_TIPO

é pq a tabela CARNE_TIPO não existe! (e se vc reparar está escrito é CARNE_TPO e não CARNE_TIPO)

se vc usou aspas-duplas no nome da tabela na criação, deve sempre fazer referência a tabela usando as aspas-duplas, e respeitando maiúsculas e minúsculas! ex: select campo_tal from ´CARNE_TIPO´


no mais o código está OK


T+


Responder

Gostei + 0

03/08/2004

Suporte_denisfr

Tem sim, basta você fazer um select comum, fazendo referencia a tabela:

Select tb_cliente.cli_cod, tb_cliente.cli_nome
from tb_cliente
where tb_cliente.cli_id = (tabela_do_triger).cli_id;


Responder

Gostei + 0

03/08/2004

Tenil

:oops: :oops: :oops: :oops: :oops: :oops:

Tisk, tisk, tisk...

Desculpe a vergonha que passei...

Li o código 1 milhão de vezes e não vi que a palavra estava errada.

Só que, infelizmente, ainda não funcionou.

Esta parte do código está correta?

SELECT NU_PRESTACOES FROM CARNE_TIPO WHERE ID_TIPO_CARNE=NEW.ID_TIPO_CARNE INTO:contador;


É assim mesmo que se atribui o valor à variável?


Responder

Gostei + 0

03/08/2004

Tenil

[b:4718945093]suporte_denisfr[/b:4718945093], valeu pela dica, só que o problema é o seguinte, preciso usar o valor para vazer o loop.

Não estou conseguindo atribuir o valor retornado à variável.

Tô ficando meio que DESESPERADO, saka?


Responder

Gostei + 0

03/08/2004

Afarias

|Esta parte do código está correta?

o código está correto, mas vc tem q dizer o q não está dando certo para tentarmos chegar na solução



T+


Responder

Gostei + 0

03/08/2004

Tenil

Mano, vou transcrever o erro, ok?

SET TERM ^ ;
CREATE TRIGGER "CRIAR_PRESTACOES" FOR "CARNE"
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE contador SMALLINT;
BEGIN
SELECT NU_PRESTACOES FROM CARNE_TIPO WHERE ID_TIPO_CARNE=NEW.ID_TIPO_CARNE INTO:contador;
WHILE (contador > 0) DO
BEGIN
INSERT INTO CARNE_PRESTACOES
(ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO, NU_PRESTACAO, IN_PAGO)
VALUES (new.ID_CARNE, NULL, NULL, contador, 0);
contador = contador - 1;
END
END ^
COMMIT WORK ^
SET TERM ; ^

Error at line 2 - Dynamic SQL Error SQL error code = -206 Column unknown CONTADOR



Responder

Gostei + 0

03/08/2004

Afarias

|Mano, vou transcrever o erro, ok?

importante!

veja... quando um parâmetro ou variável é utilizado em um comando SQL ele deve vir precedido por dois-pontos ( : )

sendo assim, altere seu código para::


INSERT INTO CARNE_PRESTACOES
(ID_CARNE, DT_PAGAMENTO, NU_VALOR_PAGO,
NU_PRESTACAO, IN_PAGO)
VALUES (new.ID_CARNE, NULL, NULL, [b:f12deee296][color=red:f12deee296]:[/color:f12deee296]contador[/b:f12deee296], 0);


T+


Responder

Gostei + 0

03/08/2004

Tenil

Funcionou!

[b:4455c8b9dc]afarias[/b:4455c8b9dc], mais uma vez vc salvou a minha pele.

Espero um dia poder retribuir a ajuda.

Abraços,

Roberto


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar