TRIGGER PARA INSERÇÃO CASO UM CAMPO TENHA UM DETERMINADO VALOR
PRECISO DESENVOLVER UMA TRIGER CASO O CAMPO CÓDIGO DA TABELA1 RECEBA DETERMINADO VALOR (EXEMPLO 82 TEREI QUE INSERIR NA TABELA2 OS VALORES 209 E 210).
Kaio
Curtidas 0
Respostas
Deivison Melo
21/10/2013
Exemplo verificando se está em modo de INSERTING (inserindo) ou UPDATING (UPDATE)
Exemplo sem se está em modo de INSERTING (inserindo) ou UPDATING (UPDATE)
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!!
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
Kaio
21/10/2013
Boa Tarde Deivison! Resumindo eu preciso que quando inserir um projeto para um determinado user essa trigger possa inserir os centros de custos vinculados ao projeto, assim inserindo o código do usuário que foi inserido na tabela do projeto também na tabela de centro de custo. esse codigo abaixo comentando o if esta inserindo mas preciso que ele insere quando eu determinar o código.
Abraço
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
Deivison Melo
21/10/2013
Quando vc fala: [b]preciso que ele insere quando eu determinar o código[/b] a que está se referindo exatamente?
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??
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
Kaio
21/10/2013
Sim, quando insiro o projeto 82, na tabela centro de custo não esta inserindo nenhum valor!
Comentando o if deixando sem condição a trigger funciona corretamente, o que pode estar errado?
Comentando o if deixando sem condição a trigger funciona corretamente, o que pode estar errado?
GOSTEI 0
Deivison Melo
21/10/2013
O cursor:
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!
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
Kaio
21/10/2013
DEIVISON FIZ SEM O CURSOR FICOU ASSIM!
MUITO OBRIGADO PELA DICA!
ABRAÇOS.
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
Deivison Melo
21/10/2013
Blz amigo qualquer coisa estamos por aqui!
estarei finalizando o tópico!
forte abraço e bons códigos!!
estarei finalizando o tópico!
forte abraço e bons códigos!!
GOSTEI 0