Ir para conteúdo

POWERED BY:

Arquivado

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

Renato_2009

Triger Só Atuliza Primeiro Bloco do Programa

Recommended Posts

CREATE OR REPLACE TRIGGER INSERT_TABELA

AFTER INSERT ON TABELA_1 FOR EACH ROW

DECLARE

PRAGMA AUTONOMOUS_TRANSACTION;

 

BEGIN

 

BEGIN

INSERT INTO TABELA_2 VALUES (:new.tipo, :new.numero);

 

 

COMMIT;

END;

 

BEGIN

UPDATE TABELA_1

SET CAMPO = 3

WHERE NUMERO = :new.numero;

COMMIT;

END;

 

END;

 

 

A minha dúvida é a seguinte: http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

Estou tentando inserir na TABELA_2 e depois na mesma trigger dar um update de atualização na TABELA_1 com o numero inserido.

O que está ocorrendo é que quando eu executo a inserção ele faz somente o primeiro bloco do programa, ou seja, ele insere os dados na minha TABELA_2, porem não atualiza a minha TABELA_1 com o update.

 

O que pode ser? Não sei mesmo, pois a trigger também não gera nenhum erro..!!

 

Desde já muito Obrigado a quem puder ajudar..!!

 

Renato http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE OR REPLACE TRIGGER INSERT_TABELA
AFTER INSERT ON TABELA_1 FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

BEGIN
INSERT INTO TABELA_2 VALUES (:new.tipo, :new.numero);


--COMMIT; -- não ponha commit em triggers pode gerar complicações
END;

NEW.CAMPO = 3;-- POIS É CAMPO DA PROPROA TABELA

END; 

Mas pode também criar um valor default para a coluna, creio que a síntaxe é

 

ALTER TABLE TABELA1 (MODIFY CAMPO DEFAULT 3);

 

Se CAMPO for nulo no Insert recebe o valor do Default.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas se você tem a trigger na TABELA_1, por que deseja atualizar novamente o campo NUMERO = :NEW.NUMERO? Ou seja, o mesmo número que inseriu na tabela 1, gravou na tabela 2, e em seguida tenta fazer o update...

 

=====>>>>>> Desconsiderem... li novamente a trigger e entendi o que deseja, acredito que da forma é da forma que o Motta explicou <<<<<======

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que se queira inicializar um campo , pelo menos assim o entendi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer atualizar o mesmo registro que está sendo inserido ?

Neste caso basta atribuir o valor a variável :new.<campo>.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja meu Código Real: http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

CREATE OR REPLACE TRIGGER INSERT_SH_PCWMSOUTPUT

AFTER INSERT ON PCWMSOUTPUT FOR EACH ROW

DECLARE

PRAGMA AUTONOMOUS_TRANSACTION;

 

BEGIN

 

BEGIN

INSERT INTO "sh_pcwmsoutput"@logix VALUES(:new.tipo, :new.numero, :new.codprod, :new.codcli, :new.codfornec, :new.codfilial,

:new.qtsep, :new.qtrec, :new.qtava, :new.qtcor, :new.dtemissao, :new.semaforo,

:new.dtprocessamento, :new.numlote, :new.dtfabricacao);

 

COMMIT; -- allowed only in autonomous triggers

END;

 

BEGIN

UPDATE PCWMSOUTPUT

SET SEMAFORO = '3'

WHERE NUMERO = :new.numero;

COMMIT;

END;

 

END;

 

 

Renato http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE OR REPLACE TRIGGER INSERT_SH_PCWMSOUTPUT
AFTER BEFORE ON PCWMSOUTPUT FOR EACH ROW -- BEFORE
DECLARE
--PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

BEGIN
INSERT INTO "sh_pcwmsoutput"@logix VALUES(:new.tipo, :new.numero, :new.codprod, :new.codcli, :new.codfornec, :new.codfilial,
:new.qtsep, :new.qtrec, :new.qtava, :new.qtcor, :new.dtemissao, :new.semaforo,
:new.dtprocessamento, :new.numlote, :new.dtfabricacao);

--COMMIT; -- allowed only in autonomous triggers
END;

BEGIN
  :new.SEMAFORO = '3';
  --COMMIT;
END;

END;

O Commit fica na aplicação chamadora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

BEFORE INSERT ON PCWMSOUTPUT FOR EACH ROW

 

 

CREATE OR REPLACE TRIGGER INSERT_SH_PCWMSOUTPUT
BEFORE INSERT ON PCWMSOUTPUT FOR EACH ROW 
DECLARE
--PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

BEGIN
INSERT INTO "sh_pcwmsoutput"@logix VALUES(:new.tipo, :new.numero, :new.codprod, :new.codcli, :new.codfornec, :new.codfilial,
:new.qtsep, :new.qtrec, :new.qtava, :new.qtcor, :new.dtemissao, :new.semaforo,
:new.dtprocessamento, :new.numlote, :new.dtfabricacao);

--COMMIT; -- allowed only in autonomous triggers
END;

BEGIN
  :new.SEMAFORO = '3';
  --COMMIT;
END;

END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

TÁ OCORRENDO O MESMO ERRO: http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

 

CREATE OR REPLACE TRIGGER INSERT_SH_PCWMSOUTPUT

BEFORE INSERT ON PCWMSOUTPUT FOR EACH ROW

DECLARE

--PRAGMA AUTONOMOUS_TRANSACTION;

 

BEGIN

 

BEGIN

INSERT INTO "sh_pcwmsoutput"@logix VALUES(:new.tipo, :new.numero, :new.codprod, :new.codcli, :new.codfornec, :new.codfilial,

:new.qtsep, :new.qtrec, :new.qtava, :new.qtcor, :new.dtemissao, new:semaforo,

:new.dtprocessamento, :new.numlote, :new.dtfabricacao);

 

--COMMIT; -- allowed only in autonomous triggers

END;

 

 

BEGIN

:new.semaforo = 3;

END;

 

END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tens algum gerenciador de banco , tipo o Sqlnavigator,SqlTools,SqlDeveloper ? Eles mostram o erro na compilação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entra nela nesta trigger que ele te mostra onde está o erro de síntaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta..!! http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif

 

Resolvi fazer por Procedure e esta fazendo certinho. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

 

É possível fazer uma trigger de insert para chamar essa procedure? http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

 

Muito Obrigado..!! http://forum.imasters.com.br/public/style_emoticons/default/natal_laugh.gif

 

Renato

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.