› Fóruns › SQL e PL/SQL › Trigger usando variável na condição if
- Este tópico contém 5 respostas, 6 vozes e foi atualizado pela última vez 13 anos, 10 meses atrás por
Marcos Lucas Melo.
-
AutorPosts
-
14 de julho de 2012 às 10:45 pm #104109
Ricardo
ParticipantePrezados,
Conforme código abaixo, esotu tentando utilizar o resultado de uma variável em uma condição para um insert… Porém, o banco está dando mensagem de trigger inválida: (ORA-04098: trigger is invalid and failed re-validation)
Vocês vêem algum problema estrutural com o código abaixo ? Eu posso utilizar a variável “v_cpf” na condição do “if” testando o resultado da consulta “(select cgc_cpf from EMPRESA)” ?
OBS.: código original foi reduzido para facilitar a visualização e entendimento.
create or replace trigger trg_func_inc
after insert on pfunc
for each rowdeclare
v_cpf VARCHAR2(11);begin
select
cpf
into
v_cpf
from ppessoa
where codigo =:new.codpessoa;if (v_cpf not in (select cgc_cpf from EMPRESA)) then
insert into EMPRESA
(CGC_CPF)
VALUES
(v_cpf);else
update EMPRESA
se SITUACAO = 'A'
where CGC_CPF = v_cpf;end if;
end trg_func_inc;
16 de julho de 2012 às 3:27 pm #104111burga
ParticipanteTenta tratar a exceção NO_DATA_FOUND no seu primeiro select (o que seleciona o cpf).
Fora isso, pode ser que o problema esteja na parte que você omitiu, rs…
16 de julho de 2012 às 3:33 pm #104112rman
Participante@burga
Eu estou apostando mais na segunda possibilidade. 😆
16 de julho de 2012 às 5:09 pm #104114Douglas Paiva de Sousa
ParticipanteNão sei se será útil ou se estou falando besteira, mais acho mais viavel você colocar toda a sua lógica dentro de uma procedure e fazer a trigger chamar essa procedure para execução.
16 de julho de 2012 às 5:09 pm #104115eversonpiza
Participantezamonari,
Tenta recompilar a trigger ‘alter trigger compile’, e se der erro roda o ‘show errors’, ele vai mostrar qual o erro da trigger.
Att.
17 de julho de 2012 às 12:20 am #104139Marcos Lucas Melo
ParticipanteOla zamonari,
Estava vendo seu script acho como o burga falou você tem que tratar esse error do NO_DATA_FOUND do primeiro select outra coisa que vi que acho que essa condição ficaria melhor se você tratas-se antes do if eu fiz assim aqui pra tenta lhe ajuda crie só uma variável a mais chamada ‘l_exists’ que recebe o resultado do select do if. Espero que tenha ajudado
SELECT COUNT(cgc_cpf) INTO l_exists
FROM EMPRESA WHERE cgc_cpf NOT IN v_cpf;IF l_exists=0 THEN
INSERT INTO EMPRESA
(CGC_CPF)
VALUES
(v_cpf);ELSE
UPDATE EMPRESA
SET SITUACAO = ‘A’
WHERE CGC_CPF = v_cpf;END IF;
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › Trigger usando variável na condição if