Pular para o conteúdo
  • Este tópico contém 5 respostas, 6 vozes e foi atualizado pela última vez 12 anos, 4 meses atrás por Avatar de Marcos Lucas MeloMarcos Lucas Melo.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #104109
    Avatar de RicardoRicardo
    Participante

      Prezados,

      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 row

      declare
      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;

      #104111
      Avatar de burgaburga
      Participante

        Tenta 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…

        #104112
        Avatar de rmanrman
        Participante

          @burga

          Eu estou apostando mais na segunda possibilidade. 😆

          #104114
          Avatar de Douglas Paiva de SousaDouglas Paiva de Sousa
          Participante

            Nã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.

            #104115
            Avatar de eversonpizaeversonpiza
            Participante

              zamonari,

              Tenta recompilar a trigger ‘alter trigger compile’, e se der erro roda o ‘show errors’, ele vai mostrar qual o erro da trigger.

              Att.

              #104139
              Avatar de Marcos Lucas MeloMarcos Lucas Melo
              Participante

                Ola 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;

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.
              plugins premium WordPress