Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #75621
    Crauss
    Participante

      estou criando uma stored procedure no oracle, ela faz insert em outras 2 tabelas…. até ai tudo bem, só que quando um destes 2 inserts da erro, eu quero colocar um rollback dentro da clausula exception, e o oracle dis o seguinte:

      ORA-04092: não é possível ROLLBACK em um gatilho

      sabem o que posso fazer ?

      abraço

      #75623
      Marcio68Almeida
      Participante

        O mais simples é que o seu gatilho chame uma função que retorne true ou false, e dependendo do resultado você efetiva ou não o teu processo.

        #75627
        Crauss
        Participante

          Ok Márcio, gostei da dica, ela pode me servir bastante em outras tarefas, mas pra ser mais preciso nesta tarefa que estou em dúvida vou colocar um pseudocodigo abaixo para vc entender o que realmente quero.

          Terei 2 tabelas, uma de CLIENTE e outra de LOG, a tabela LOG ira sempre receber um insert quando gerar uma exceção na inserção da tabela cliente. mais ou menos o seguinte:

          CREATE PROCEDURE CRIA_LOG
          BEGIN
          BEGIN
          INSERT INTO CLIENTE…….
          COMMIT;
          END;
          EXCEPTION
          ROLLBACK
          INSERT INTO LOG…..
          COMMIT
          END;

          entendeu ? caso de erro na inserção da tabela CLIENTE, faz rollback e grava na tabela de LOG.

          espero ter sido claro.

          Abraço

          #75630
          Marcio68Almeida
          Participante

            Ah, neste caso é mais simples…
            Begin
            Insert into Cliente
            Exception
            insert into log
            end;
            commit;

            Você vai tentar inserir em cliente, caso falhe, não há por que fazer rollback, já que não houve inserção, certo ?
            No caso de erro, você vai inserir um registro no log, caso não haja erro, não tem por que inserir no log.
            antes de sair efetiva o resultado, se inserir em cliente ou no log…

            #75631
            Crauss
            Participante

              mas la vão 2 perguntas !!!

              1 – e se eu fizer o seguinte?

              BEGIN
              INSERT INTO CLIENTE…..
              INSERT INTO CLIENTE2….
              ….

              e o erro acontecer no SEGUNDO insert, preciso sim de um rollback não é ?

              2 – Pelo que eu vi NÃO TEM como colocar um rollback ou commit em um stored procedure. alguem confirma isto ?

              #77031
              drumond
              Participante

                cara Commit, eu ja usei em procedure do 9i sim, nao sei se no 8i funciona, mas enfim, funcionou !! 🙂

                #77122
                drumond
                Participante

                  cara Commit, eu ja usei em procedure do 9i sim, nao sei se no 8i funciona, mas enfim, funcionou !! 🙂

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