Re: [oracle_br] Problema com tabelas mutante em trigger

2008-05-20 Por tôpico Carlos Amaral
Alexandre,
Esperimente usar a clausula
pragma AUTONOMOUS_TRANSACTION;

Veja:


DECLARE
cursores
variáveis

pragma AUTONOMOUS_TRANSACTION;

BEGIN
FOR xx LOOP
   xx
   xx
   xx
   END LOOP;

   COMMIT;  -- Este commit é obrigatório
END;

Vê se isso funciona...
Abraço.




Em 20/05/08, Alexandre Rocha Placido[EMAIL PROTECTED] escreveu:
 Estou com um problema para resolver com uma trigger só que não vai funcionar
 no normal porque o Orac Le irá reclamar de tabela mutante.



 O problema é o seguinte eu tenho numa mesma tabela pedido atacadista e
 pedido normal, queria testar quando vou gravar um pedido normal se um
 determinado atributo dele é o mesmo do pedido atacadista a que ele se
 refere.



 Não consigo fazer um select dentro de uma trigger porque vai dar o problema
 de tabela mutante.



 Alguém tem uma idéia de como criar um artifício que resolva este problema?



 Alexandre Rocha Placido

 image002Gerente de TI

 DITEC - Agrovale



 74 3612-2900

 87 8802-0474

 [EMAIL PROTECTED]

 MSN: [EMAIL PROTECTED]

 P Ler aqui sem imprimir é mais legal e faz bem ao meio ambiente.





 [As partes desta mensagem que não continham texto foram removidas]




-- 
==
Carlos Amaral
[EMAIL PROTECTED]
[EMAIL PROTECTED]
(55)(21) 9310-6104
Eduquemos as crianças, e não será necessário castigar os homens.


Re: [oracle_br] Problema com tabelas mutante em trigger

2008-05-20 Por tôpico Leonardo Rezende
Você pode tentar resolver isso com PRAGMA AUTONOMOUS_TRANSACTION.

Example 6-46 Declaring an Autonomous Trigger

CREATE TABLE emp_audit ( emp_audit_id NUMBER(6), up_date DATE,
  new_sal NUMBER(8,2), old_sal NUMBER(8,2) );

CREATE OR REPLACE TRIGGER audit_sal
AFTER UPDATE OF salary ON employees FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
-- bind variables are used here for values
INSERT INTO emp_audit VALUES( :old.employee_id, SYSDATE,
  :new.salary, :old.salary );
   COMMIT;
END;
/

Ela executará em uma transação separada!



Alexandre Rocha Placido escreveu:
 
 
 Estou com um problema para resolver com uma trigger só que não vai funcionar
 no normal porque o Orac Le irá reclamar de tabela mutante.
 
 O problema é o seguinte eu tenho numa mesma tabela pedido atacadista e
 pedido normal, queria testar quando vou gravar um pedido normal se um
 determinado atributo dele é o mesmo do pedido atacadista a que ele se
 refere.
 
 Não consigo fazer um select dentro de uma trigger porque vai dar o problema
 de tabela mutante.
 
 Alguém tem uma idéia de como criar um artifício que resolva este problema?
 
 Alexandre Rocha Placido
 
 image002Gerente de TI
 
 DITEC - Agrovale
 
 74 3612-2900
 
 87 8802-0474
 
 [EMAIL PROTECTED] mailto:aplacido%40agrovale.com
 
 MSN: [EMAIL PROTECTED] mailto:aplacido%40gmail.com
 
 P Ler aqui sem imprimir é mais legal e faz bem ao meio ambiente.
 
 [As partes desta mensagem que não continham texto foram removidas]
 
 


-- 

Sds,

   Leonardo Rezende
   Analista Desenvolvedor
   [EMAIL PROTECTED]


Re: [oracle_br] Problema com tabelas mutante em trigger

2008-05-20 Por tôpico Usuário do Sistema
Sua pergunta esta um pouco confusa, mas pelo que percebi vc tem uma trigger
na tabela, e ela se auto atualiza, gerando o erro de tabela mutante, se for
esse o seu caso basta criar uma view identica a tabela, e colocar a trigger
na view, lembre-se que a trigger é instead of insert,update,delete on table
for each row ..

Exemplo:

create table PEDIDO
(
ID NUMBER,
DESCR VARCHAR2(200)
);

create or replace view vw_pedido as
select ID,DESCR from pedido;

create or replace trigger trg_vw_pedido instead of insert on vw_pedido
for each row
BEGIN
insert into pedido(id,descr)
values(:new.id,:new.descr);
END;

Dessa forma vc pode alterar a a view sem problemas.

Um abraço.


Em 20/05/08, Alexandre Rocha Placido [EMAIL PROTECTED] escreveu:

   Estou com um problema para resolver com uma trigger só que não vai
 funcionar
 no normal porque o Orac Le irá reclamar de tabela mutante.

 O problema é o seguinte eu tenho numa mesma tabela pedido atacadista e
 pedido normal, queria testar quando vou gravar um pedido normal se um
 determinado atributo dele é o mesmo do pedido atacadista a que ele se
 refere.

 Não consigo fazer um select dentro de uma trigger porque vai dar o problema
 de tabela mutante.

 Alguém tem uma idéia de como criar um artifício que resolva este problema?

 Alexandre Rocha Placido

 image002Gerente de TI

 DITEC - Agrovale

 74 3612-2900

 87 8802-0474

 [EMAIL PROTECTED] aplacido%40agrovale.com

 MSN: [EMAIL PROTECTED] aplacido%40gmail.com

 P Ler aqui sem imprimir é mais legal e faz bem ao meio ambiente.

 [As partes desta mensagem que não continham texto foram removidas]

 



[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Problema com tabelas mutante em trigger

2008-05-20 Por tôpico Usuário do Sistema
Uma trigger serve para disparar uma ação sempre que houver um evento do tipo
de alteração na tabela, além claro de triggers de auditoria, etc, se você
quer apenas fazer uma consulta na tabela não é necessário usar trigger.

talvez seja melhor vc  criar uma função do tipo in, passando como
parametro de entrada o valor do pedido e obtendo assim um valor de saida.



Em 20/05/08, Alexandre Rocha Placido [EMAIL PROTECTED] escreveu:

   Para ter certeza que entendi as idéias que mandaram.

 TRIGGER PED_VENDA_TRG

 BEGIN

 SELECT * FROM PEDIDO_VENDA WHERE PED_CODIGO = :NEW.PED_ATACADISTA;

 + algumas instruções e testes

 END;

 Não quero fazer update na tabela, quero consultar uma outra linha desta
 mesma tabela para poder fazer algumas verificações.

 De: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br [mailto:
 oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] Em
 nome de Usuário do Sistema
 Enviada em: terça-feira, 20 de maio de 2008 15:53
 Para: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br
 Assunto: Re: [oracle_br] Problema com tabelas mutante em trigger

 Sua pergunta esta um pouco confusa, mas pelo que percebi vc tem uma trigger
 na tabela, e ela se auto atualiza, gerando o erro de tabela mutante, se for
 esse o seu caso basta criar uma view identica a tabela, e colocar a trigger
 na view, lembre-se que a trigger é instead of insert,update,delete on table
 for each row ..

 Exemplo:

 create table PEDIDO
 (
 ID NUMBER,
 DESCR VARCHAR2(200)
 );

 create or replace view vw_pedido as
 select ID,DESCR from pedido;

 create or replace trigger trg_vw_pedido instead of insert on vw_pedido
 for each row
 BEGIN
 insert into pedido(id,descr)
 values(:new.id,:new.descr);
 END;

 Dessa forma vc pode alterar a a view sem problemas.

 Um abraço.

 Em 20/05/08, Alexandre Rocha Placido [EMAIL 
 PROTECTED]aplacido.oracle%40gmail.com
 mailto:aplacido.oracle%40gmail.com aplacido.oracle%2540gmail.com 
 escreveu:
 
  Estou com um problema para resolver com uma trigger só que não vai
  funcionar
  no normal porque o Orac Le irá reclamar de tabela mutante.
 
  O problema é o seguinte eu tenho numa mesma tabela pedido atacadista e
  pedido normal, queria testar quando vou gravar um pedido normal se um
  determinado atributo dele é o mesmo do pedido atacadista a que ele se
  refere.
 
  Não consigo fazer um select dentro de uma trigger porque vai dar o
 problema
  de tabela mutante.
 
  Alguém tem uma idéia de como criar um artifício que resolva este
 problema?
 
  Alexandre Rocha Placido
 
  image002Gerente de TI
 
  DITEC - Agrovale
 
  74 3612-2900
 
  87 8802-0474
 
  [EMAIL PROTECTED] aplacido%40agrovale.com mailto:
 aplacido%40agrovale.com aplacido%2540agrovale.com
 aplacido%40agrovale.com
 
  MSN: [EMAIL PROTECTED] aplacido%40gmail.com mailto:
 aplacido%40gmail.com aplacido%2540gmail.com
 aplacido%40gmail.com
 
  P Ler aqui sem imprimir é mais legal e faz bem ao meio ambiente.
 
  [As partes desta mensagem que não continham texto foram removidas]
 
 
 

 [As partes desta mensagem que não continham texto foram removidas]

 [As partes desta mensagem que não continham texto foram removidas]

 



[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Problema com tabelas mutante em trigger

2008-05-20 Por tôpico Usuário do Sistema
Uma trigger serve para disparar uma ação sempre que houver algum tipo de
alteração na tabela, além claro de triggers de auditoria, etc, se você quer
apenas fazer uma consulta na tabela não é necessário usar trigger.



Em 20/05/08, Alexandre Rocha Placido [EMAIL PROTECTED] escreveu:

   Para ter certeza que entendi as idéias que mandaram.

 TRIGGER PED_VENDA_TRG

 BEGIN

 SELECT * FROM PEDIDO_VENDA WHERE PED_CODIGO = :NEW.PED_ATACADISTA;

 + algumas instruções e testes

 END;

 Não quero fazer update na tabela, quero consultar uma outra linha desta
 mesma tabela para poder fazer algumas verificações.

 De: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br [mailto:
 oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] Em
 nome de Usuário do Sistema
 Enviada em: terça-feira, 20 de maio de 2008 15:53
 Para: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br
 Assunto: Re: [oracle_br] Problema com tabelas mutante em trigger

 Sua pergunta esta um pouco confusa, mas pelo que percebi vc tem uma trigger
 na tabela, e ela se auto atualiza, gerando o erro de tabela mutante, se for
 esse o seu caso basta criar uma view identica a tabela, e colocar a trigger
 na view, lembre-se que a trigger é instead of insert,update,delete on table
 for each row ..

 Exemplo:

 create table PEDIDO
 (
 ID NUMBER,
 DESCR VARCHAR2(200)
 );

 create or replace view vw_pedido as
 select ID,DESCR from pedido;

 create or replace trigger trg_vw_pedido instead of insert on vw_pedido
 for each row
 BEGIN
 insert into pedido(id,descr)
 values(:new.id,:new.descr);
 END;

 Dessa forma vc pode alterar a a view sem problemas.

 Um abraço.

 Em 20/05/08, Alexandre Rocha Placido [EMAIL 
 PROTECTED]aplacido.oracle%40gmail.com
 mailto:aplacido.oracle%40gmail.com aplacido.oracle%2540gmail.com 
 escreveu:
 
  Estou com um problema para resolver com uma trigger só que não vai
  funcionar
  no normal porque o Orac Le irá reclamar de tabela mutante.
 
  O problema é o seguinte eu tenho numa mesma tabela pedido atacadista e
  pedido normal, queria testar quando vou gravar um pedido normal se um
  determinado atributo dele é o mesmo do pedido atacadista a que ele se
  refere.
 
  Não consigo fazer um select dentro de uma trigger porque vai dar o
 problema
  de tabela mutante.
 
  Alguém tem uma idéia de como criar um artifício que resolva este
 problema?
 
  Alexandre Rocha Placido
 
  image002Gerente de TI
 
  DITEC - Agrovale
 
  74 3612-2900
 
  87 8802-0474
 
  [EMAIL PROTECTED] aplacido%40agrovale.com mailto:
 aplacido%40agrovale.com aplacido%2540agrovale.com
 aplacido%40agrovale.com
 
  MSN: [EMAIL PROTECTED] aplacido%40gmail.com mailto:
 aplacido%40gmail.com aplacido%2540gmail.com
 aplacido%40gmail.com
 
  P Ler aqui sem imprimir é mais legal e faz bem ao meio ambiente.
 
  [As partes desta mensagem que não continham texto foram removidas]
 
 
 

 [As partes desta mensagem que não continham texto foram removidas]

 [As partes desta mensagem que não continham texto foram removidas]

 



[As partes desta mensagem que não continham texto foram removidas]