Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Romulo Silva_69300

Trigger update mesma tabela

Recommended Posts

O problema de uma trigger de insert deste tipo é que o registro inserido vai disparar a trigger de forma recursiva, talvez se você detalhar melhor o problema alguém pode ver uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao na verdade é o seguinte.

 

Uma mesma tabela na qual armazena os dados dos produtos de filiais, ou seja, estoque, custo e etc.

E tenho a seguinte estrutura:

 

codfilial codprod custo

1 101 2,05

2 101 0,00

 

A minha necessidade é replicar a coluna custo da filial 1 para a filial 2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentou algo como ? (não tenho certeza se o Oracle permite operação na mesma tabela da trigger)

create or replace trigger trg_teste
after insert on produto
for each row

begin
  if :new.codfilial = 1 then
    insert into produto (codfilial , codprod ,custo)
    values (2, :new.codprod ,:new.custo)
  end if;
end;

Cheque a sintaxe correta todavia

 

Mas eu :

 

Reveria este modelo por via das dúvidas

 

Faria o "loop" na camada de aplicação , vai que surge a filial 3,4,5 ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, o oracle não permite a utilização, no meu caso seria um update e não insert. Ja tentei destas formas e não obtive qualquer resultado.

Teria a forma de utilização de Procedure e Package? Como posso realizar através dessa forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve cair no caso do "mutating table" , existe documentação sobre como contornar isto via Oracle, mas eu acho "mais barato" controlar isto via aplicação.

 

Um simples loop

 

exemplo em plsql (sintaxe tosca)

create or replace procedure insere_produto(pcod in number,pcusto in number)
begin
for r in (select filial from filiais)
  loop
    insert into produto (r.filial , pcodprod ,pcusto);
  end loop;
end;

na sua aplicação se "chama" a SP

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.