Fórum TRIGGER PARA INSERÇÃO CASO UM CAMPO TENHA UM DETERMINADO VALOR #459033
21/10/2013
0
Kaio
Curtir tópico
+ 0Posts
21/10/2013
Deivison Melo
CREATE OR REPLACE TRIGGER trg_insere_valor_em_outra_tabela
BEFORE INSERT OR UPDATE ON sua_tabela
REFERENCING
NEW AS NEW
OLD AS OLD
FOR EACH ROW
DECLARE
cursor cExemplo is
select SYSDATE data
from sys.dual;
vcExemplo cExemplo%rowtype;
BEGIN
open cexemplo;
fetch cexemplo into vcexemplo;
close cexemplo;
--
IF INSERTING THEN
if vcexemplo.data = sysdate THEN -- aqui comparei o valor do cursor com o sysdate, no meu caso sempre vai dar igual
INSERT INTO tabela_desejada(campos...)
VALUES(:NEW.campo1, :NEW.campo2, :NEW.campoN ...);
end if;
-- Se estiver em modo de inserção (insert)
ELSE
IF UPDATING THEN
-- Se estiver em modo de alteração (update)
END IF;
END IF;
END;
/
Exemplo sem se está em modo de INSERTING (inserindo) ou UPDATING (UPDATE)
CREATE OR REPLACE TRIGGER trg_insere_valor_em_outra_tabela
BEFORE INSERT OR UPDATE ON sua_tabela
REFERENCING
NEW AS NEW
OLD AS OLD
FOR EACH ROW
DECLARE
cursor cExemplo is
select SYSDATE data
from sys.dual;
vcExemplo cExemplo%rowtype;
BEGIN
open cexemplo;
fetch cexemplo into vcexemplo;
close cexemplo;
if vcexemplo.data = sysdate THEN -- aqui comparei o valor do cursor com o sysdate, no meu caso sempre vai dar igual
INSERT INTO tabela_desejada(campos...)
VALUES(:NEW.campo1, :NEW.campo2, :NEW.campoN ...);
end if;
END;
/
PS. Evite o Mutating na trigger
Nesse tópico você entenderá o que é e como evitar!
[url]http://glufke.net/oracle/viewtopic.php?t=96[/url]
Qualquer dúvida estou à disposição!
Abração e bons códigos!!
Gostei + 0
23/10/2013
Kaio
CREATE OR REPLACE TRIGGER trg_insere_outra_tabela
AFTER INSERT OR UPDATE ON PROJETO
REFERENCING
NEW AS NEW
OLD AS OLD
FOR EACH ROW
DECLARE
cursor cExemplo is
select *
from PROJETO;
vcExemplo cExemplo%rowtype;
BEGIN
open cexemplo;
fetch cexemplo into vcexemplo;
close cexemplo;
IF INSERTING THEN
-- IF vcExemplo.cod_projeto = 82 THEN -- aqui eh o valor que esta sendo inserido na tabela projeto
INSERT INTO centro_custo (cod_usuario --quero que esse codigo venha da tabela projeto ,campo2,campo3,campo4,cod_centro_custo)
VALUES(1153,2,4,4,219); -- aki inserir o codigo 1153 do usuario manual , o 219 eh o codigo do centro de custo.
-- end if;
end if;
end;
Abraço
Gostei + 0
23/10/2013
Deivison Melo
Já não consta um if ali verificando o código?
Suponhamos que esse código será lido de uma informação gravada em uma tabela, certo?
Qual sua dúvida atual??
Gostei + 0
23/10/2013
Kaio
Comentando o if deixando sem condição a trigger funciona corretamente, o que pode estar errado?
Gostei + 0
30/10/2013
Deivison Melo
cursor cExemplo is
select *
from PROJETO
Está retornando valor?
Pois se você remove o if e o valor é inserido provavelmente ou está trazendo um valor diferente de 82 ou está vindo nulo...
Abração e bons códigos!
Gostei + 0
30/10/2013
Kaio
CREATE OR REPLACE TRIGGER mgcli.trg_insere_cc_por_projeto
AFTER INSERT OR UPDATE ON PROJETO_USUARIO
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
BEGIN
IF INSERTING THEN
-- SE PROJETO FOR IGUAL A 82
IF :new.pro_in_reduzido = 82 THEN
INSERT INTO CCUSTO_USUARIO
(CODIGO_USU,
CAMPO2,
CAMPO3,
CAMPO4,
CAMPO5)
VALUES
(:new.codigo_usu, 2, 4, 4, 219);
END IF;
END;
MUITO OBRIGADO PELA DICA!
ABRAÇOS.
Gostei + 0
30/10/2013
Deivison Melo
estarei finalizando o tópico!
forte abraço e bons códigos!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)