Ir para conteúdo

Arquivado

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

David Araujo

Trigger: criação!

Recommended Posts

Iae galera,

 

queria a ajuda de vocês se possível, to com unas dúvidas com uma trigger que to tentando fazer. Se liga..

 

eu tenho uma tabela chamada plano_conta e outra tabela plano_conta1. elas tem a mesma estrutura:

 

plano_conta(

despesa char(9),

descricao_conta varchar2(50),

escrituracao char(1),

ativo char(1));

 

plano_conta1(

despesa1 char(9),

descricao_conta varchar2(50),

escrituracao char(1),

ativo char(1));

 

a única diferença é que a despesa1 ela recebe a despesa da tabela plano_conta mas com as 7 últimas posições com zero.

exemplo:

 

despesa tem esse valor = '196210404' ae na despesa1 ela tem esse valor = '190000000' entendeu?

 

ai no caso eu atualizo a tabela plano_conta ae depois que atualizo ela pra atualizar a tabela plano_conta1 eu faço o seguinte:

 

insert into plano_conta1(despesa1, descricao_conta, escrituracao, ativo)

select plc.despesa as despesa1,

plc.descricao_conta,

plc.escrituracao,

plc.ativo

from plano_conta plc

where SUBSTR(plc.despesa,3,9) = '0000000'

and plc.despesa not in (select despesa1 from plano_conta1);

 

ai eu to querendo fazer uma trigger que faça isso automaticamente pra mim toda vez que eu inserir um registro na tabela plano_conta, só que

travei tentando fazer ela, dai se poder me dar uma força eu agradeço! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se ajuda a ideia básica ....

 

create or replace trigger trg_plano_conta
after insert on plano_conta is
  vn_despesa plano_conta.despesa%type;
begin
  --
  vn_despesa := ---- funcao que gera a transformacao requerida
  --
  insert into plano_conta1 (vn_despesa,:new.descricao_conta,:new.escrituracao,:new.ativo)
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se ajuda a ideia básica ....

 

create or replace trigger trg_plano_conta
after insert on plano_conta is
  vn_despesa plano_conta.despesa%type;
begin
  --
  vn_despesa := ---- funcao que gera a transformacao requerida
  --
  insert into plano_conta1 (vn_despesa,:new.descricao_conta,:new.escrituracao,:new.ativo)
end;

 

no caso Motta como eu faria pra ver se esse registro que eu estou inserindo já não está cadastrado na tabela plano_conta1?

Compartilhar este post


Link para o post
Compartilhar em outros sites

create or replace trigger trg_plano_conta

after insert on plano_conta is

vn_despesa plano_conta.despesa%type;

begin

--

vn_despesa := ---- funcao que gera a transformacao requerida

--

begin

insert into plano_conta1 (vn_despesa,:new.descricao_conta,:new.escrituracao,:new.ativo);

exception

When DUP_VAL_ON_INDEX THEN

NULL;-- SE DUPLICADO IGNORA E NADA FAZ

when OTHERS then

RAISE;

end;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

create or replace trigger trg_plano_conta
after insert on plano_conta
for each row
declare
  vn_despesa plano_conta.despesa%type;
begin
  vn_despesa := SUBSTR(:new.despesa,3,9) = '0000000';
  insert into plano_conta1(despesa1, descricao_conta, escrituracao, ativo) values(vn_despesa, :new.descricao_conta, :new.escrituracao, :new.ativo);
end;

 

dae Motta, qnd eu vou inserir na tabela plano_conta pra testa a trigger fica dando esse errro ae:

 

ORA-04098: gatilho 'trg_plano_conta' é inválido e a revalidação falhou

 

ai to meio perdido... http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está fazendo isto por algum programa , sabe como ver os erros ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que ele exibe os erros do objeto salvo.

 

Que erro que dá ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo PL/SQL Developer vá na trigger em questão (trg_plano_conta) , ela deve estar inválida , verifique o erro que faz com que ela fique assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

create or replace trigger trg_teste
after insert on teste
for each row
declare
  vn_despesa teste.despesa%type;
begin
  vn_despesa := SUBSTR(:new.despesa,3,9) = '0000000';
  insert into teste1(despesa1, descricao) values(vn_despesa, :new.descricao);
end;

fiz esse outro teste ae ai ta acusando isso:

erro na linha 7 - PLS - 00382 - a expressão é do tipo incorreto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta linha

vn_despesa := SUBSTR(:new.despesa,3,9) = '0000000';

 

Tem um erro , pela lógica passado seria

 

vn_despesa := SUBSTR(:new.despesa,1,2 || '0000000';

 

Ou seja pega as duas primeiras possições de despesa e junta com zeros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, coisa de quem programa em notepad .....

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.