Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #107286
    Avatar de C-S-RC-S-R
    Participante

      Opa esse ano começou bem, rsrs

      Gostaria de saber se existe uma maneira de quando meu PL/SQL encontrar um NO_DATA_FOUND ele continuar a execução.


      create table cesar.teste_sync (a number, b number, c varchar2(500));

      declare
      a number;
      b number;
      t varchar2(500);
      begin
      execute immediate 'select * from dual where 1 =2' into a;
      t := 'insert into cesar.teste_sync values (:1, :2, :3)';
      execute immediate t using a, b, 'Teste';
      exception
      when no_data_found then null;
      end;

      Nesse exemplo quando ele faz o select ele da um no data found e com a exception ele não ocorre erro e termina o bloco, porém ele termina o bloco sem executar o insert.

      A solução que encontrei foi colocar em cada select um bloco com exception assim ele continuaria a execução normalmente.

      Gostaria se existe uma outra solução.

      Obrigado pela ajuda.

      At
      Cesar MOraes

      #107288
      Avatar de rmanrman
      Participante

        @C-S-R

        O bloco de EXCEPTION serve para o tratamento de exceção. No caso do NO_DATA_FOUND ele é disparado quando um SELECT não retornar nenhum registro. Se você não quer fazer nada quando for disparado no NO_DATA_FOUND é isso mesmo. Mas geralmente é feito alguma coisa para tratar o erro, como por exemplo fazer outro SELECT em outra tabela, chamar uma PROCEDURE, fazer um INSERT na tabela de log, esse tipo de coisa.

        #107297
        Avatar de C-S-RC-S-R
        Participante

          @rman

          Eu quero que continue a execução. No meu exemplo ele não executa o insert.

          Fiz isso para arrumar mas preciso colocar um bloco em cada select.
          Gostaria de saber se tem outra maneira

          declare
          a number;
          b number;
          t varchar2(500);
          begin
          begin
          execute immediate 'select * from dual where 1 =2' into a;
          exception
          when no_data_found then null;
          end;
          t := 'insert into cesar.teste_sync values (:1, :2, :3)';
          execute immediate t using a, b, 'Teste';
          exception
          when no_data_found then null;
          end;

          #107299
          Avatar de rmanrman
          Participante

            @C-S-R

            Todo SELECT executado pode gerar uma exceção. Resta você verificar se vai tratar ou não.

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