Pular para o conteúdo
  • Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 10 meses atrás por Marcio68Almeida.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #75391
    Anônimo

      Bom dia Galera,

      Conheço pouco de PL/SQL e gostaria de saber se existe uma exception ou qualquer outro tratamento que eu possa fazer no meu script. Se falhar um DELETE quero que faça rollback em tudo, caso contrario, commit.

      Por enquanto esta sem tratamento nenhum, se falhar um (retornar false na instrução), ele efetua o delete nos outros

      Pesquisei no google e vi que em SQL Server tem uma variáve @@Error que identifica se ocorreu algum erro na instrução…

      CREATE OR REPLACE PROCEDURE DELETE_CUSTOMER
      (CUSTOMER_ID NUMBER)
      AS
      BEGIN
      DELETE
      CUSTOMERCONTACT
      WHERE
      CUSTOMERID = CUSTOMER_ID;

      DELETE
      CUSTOMERCONTRACT_LOCAL A
      WHERE
      A.CUSTOMERCONTRACTID IN (SELECT B.CUSTOMERCONTRACTID FROM CUSTOMERCONTRACT B WHERE B.CUSTOMERID = CUSTOMER_ID);

      DELETE
      CUSTOMERCONTRACT
      WHERE
      CUSTOMERID = CUSTOMER_ID;

      DELETE
      CUSTOMER
      WHERE
      CUSTOMERID = CUSTOMER_ID;
      END;

      Tentei fazer algo do tipo (bem iniciante hahahaha):

      Declare
      erro number (5);
      Begin

      Begin transaction

      delete...

      exception
      when then
      erro++;

      .
      .
      .

      end transaction;

      if erro <> 0 then
      rollback;
      else
      commit;
      end if;

      end;

      Muito obrigado desde já pela ajuda.

      Abraços

      #75392
      Anônimo

        Ficaria um código + ou – assim:

        begin
        delete ……;

        commit;

        exception
        when others then
        rollback;

        end ;

        #75395
        Marcio68Almeida
        Participante

          Precisa ver se não é um processamento encadeado, quero dizer, o último só será processado caso todos os acima estejam OK.
          Se for processos individuais, é o que nosso amigo indicou, se for processo encadeado, tem que fazer um MERGE entre a tua lógica e a do Ricardo.
          Eu colocaria da seguinte forma :
          Begin
          Begin
          delete;
          exception when others then
          raise-application-error (não lembro bem da sintaxe, mas o objetivo é abortar o processo)
          end;

          Begin
          delete;
          exception when others then
          raise-application-error;
          end;

          commit;

          exception when others then
          rollback;
          end;

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