Pular para o conteúdo
  • Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 9 anos, 4 meses atrás por Avatar de alef pires de oliveiraalef pires de oliveira.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #107633
    Avatar de alef pires de oliveiraalef pires de oliveira
    Participante

      Sou iniciante e estou precisando de ajuda, preciso atualiza uma coluna mas nesse caso a coluna é da mesma tabela, o erro de mutante foi resolvido pelo pragma automus mas ela não estar atualizando a coluna desejada

      CREATE OR REPLACE TRIGGER DB_SIG.TAI_FASE
      after
      INSERT
      ON DB_SIG.TBL_FASE
      FOR EACH ROW
      DECLARE

      PRAGMA AUTONOMOUS_TRANSACTION;

      BEGIN
      –for v_fase in cur_fase loop

      IF :new.LO_ULTIMA_FASE = ‘N’ THEN

      UPDATE DB_SIG.TBL_FASE SET LO_ULTIMA_FASE = ‘S’
      WHERE SQ_FASE_PROJ = :new.sq_fase_proj;

      commit;

      END IF;

      — end loop;
      END;
      /

      #107634
      Avatar de rmanrman
      Participante

        @alef pires de oliveira

        Realmente não vai funcionar da forma como foi implementando. Só para você entender o que está acontecendo.

        PRAGMA AUTONOMOUS_TRANSACTION abre uma sessão em paralelo a sessão original, ou seja, são sessões diferentes, desta forma a sessão da TRIGGER só vai “ver” as modificações feitas pela sessão original após o COMMIT.

        Tente da seguinte forma:


        CREATE OR REPLACE TRIGGER DB_SIG.TAI_FASE
        after
        INSERT
        ON DB_SIG.TBL_FASE
        FOR EACH ROW
        BEGIN
        --for v_fase in cur_fase loop

        IF :new.LO_ULTIMA_FASE = 'N' THEN

        :new.LO_ULTIMA_FASE := 'S';

        END IF;

        -- end loop;
        END;
        /

        Só um detalhe, a solução correta é modificar o INSERT passando o valor correto. Esse tipo de implementação via TRIGGER pode gerar muita confusão.

        #107638
        Avatar de alef pires de oliveiraalef pires de oliveira
        Participante

          Só que vai da o erro ORA-04084: não pode alterar valores NEW para este tipo de gatilho. Teria que mudar para before.

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