Begin dentro de outro begin

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Boa noite,

Gostaria de saber por que, e se é necessário usar um begin dentro de outro begin?
Se sim em que situação é aplicável. :)
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

As variáveis declaradas dentro de um BEGIN só são visíveis dentro deste begin.
Veja este exemplo: (to criando 2 vezes a mesma variavel, e setando valores pra ela)

Selecionar tudo

SQL> set serveroutput on
SQL> 
SQL> declare
  2    vtemp Number :=10;
  3  begin
  4    dbms_output.put_line( '1. Aqui o numero é: '||vtemp );
  5     --um outro begin aqui!
  6     declare
  7       vtemp Number :=20;
  8     begin
  9       dbms_output.put_line( '2. Aqui o numero é: '||vtemp );
 10     end;
 11    dbms_output.put_line( '3. Aqui o numero é: '||vtemp );
 12  end;
 13  /
 
1. Aqui o numero é: 10
2. Aqui o numero é: 20
3. Aqui o numero é: 10
 
PL/SQL procedure successfully completed
 
SQL> 
Outro motivo pra criar vários BEGIN é poder capturar EXCEPTIONS.
Por exemplo, você faz uma query simples, e se der erro, quer continuar.

Selecionar tudo

DECLARE 
  vtemp NUMBER;
BEGIN
  
  BEGIN
    SELECT campo
    INTO vtemp
    FROM tabela
    WHERE campo = 20;
  EXCEPTION WHEN NO_DATA_FOUND 
    THEN vtemp := 0;
  END;

  --continua o programa...

END;
  
É por aí !
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Muito obrigado pela explicação dr_gori :mrgreen:
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

O que o gori disse, chama-se Escopo
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

Como em qualquer outra linguagem de programação, em PL/SQL você consegue fazer o aninhamento de blocos e isso é necessário principalmente para isolar código.

Se você tem um bloco PL/SQL com 100 linhas e não quer abortar a execução dele se ocorrer erro por exemplo na linha 30, isole essa linha dentro de outro bloco BEGIN EXCEPTION END, ok?

[]s
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes