PL / SQL Variable Scope & Bloco Externo Interno: Estrutura Aninhada

Índice:

Anonim

O que é o Oracle de blocos aninhados?

No PL / SQL, cada bloco pode ser aninhado em outro bloco. Eles são chamados de bloco aninhado. Blocos aninhados são muito comuns quando queremos realizar um determinado processo e, ao mesmo tempo, o código para esses processos deve ser mantido em um container separado (bloco).

O conceito de bloco aninhado ajudará o programador a melhorar a legibilidade, separando as coisas complexas em cada bloco e a tratar a exceção de cada bloco dentro do bloco externo principal.

Neste tutorial, você aprenderá-

  • Estrutura de Bloco Aninhado
  • Escopos em Bloco Aninhado: Escopo Variável

Estrutura de Bloco Aninhado

Um bloco pode ser aninhado em outro bloco. Isso pode ser aninhado na parte de execução ou na parte de tratamento de exceções. Esses blocos também podem ser identificados. Um bloco externo pode conter muitos blocos internos. Cada bloco interno é mais uma vez um bloco PL / SQL, portanto, todas as propriedades e características do bloco interno serão as mesmas do bloco externo. A imagem abaixo fornece a representação pictórica da estrutura de blocos aninhados. O bloco pai é o bloco principal e o bloco filho é o bloco aninhado.

Abaixo está a sintaxe para o bloco aninhado.

Sintaxe de bloco aninhado

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • A sintaxe acima mostra o bloco aninhado que contém um total de dois blocos.
  • Esses blocos são rotulados como 'outer_block' e 'inner_block'

Escopos em Bloco Aninhado: Escopo Variável

No bloco aninhado, é preciso entender o escopo e a visibilidade de cada bloco claramente antes de usá-los. Particularmente no bloco interno, os elementos do bloco externo e interno serão visíveis. Portanto, é necessário um entendimento adequado disso.

Os pontos abaixo resumirão mais sobre os escopos em blocos aninhados.

  • Os elementos declarados no bloco externo e o valor definido antes que a definição do bloco interno seja visível dentro do bloco interno.
  • Os elementos declarados no bloco interno não são visíveis no bloco externo. Eles são visíveis apenas dentro do bloco interno.
  • Bloco externo e bloco interno podem ter uma variável com o mesmo nome.
  • No caso de variáveis ​​com o mesmo nome, bloco interno por padrão, fará referência à variável declarada apenas no bloco interno.
  • Se o bloco interno quiser se referir à variável do bloco externo que tem o mesmo nome do bloco interno, então o bloco externo deve ser LABELED, e a variável do bloco externo pode ser referida como '. '

O exemplo a seguir ajudará a entender mais sobre esses escopos.

Exemplo 1 : Neste exemplo, vamos ver o escopo das variáveis ​​no bloco interno e externo. Além disso, veremos como referir-se às variáveis ​​usando o rótulo do bloco.

<>DECLAREvarl VARCHAR2(30):='outer_block';var2 VARCHAR2(30):='value before inner block’;BEGIN<>DECLAREvarl VARCHAR2(30):='inner_block';BEGINdbms_output.put_line(varl), ‭ ‬dbms_output.put_line(OUTER_BLOCKvar1);dbms_output.put_line(var2);END;var2:='value after inner block';END;/

Explicação do código:

  • Linha de código 1 : Rotulando o bloco externo como "OUTER_BLOCK".
  • Linha de código 3 : Declaração de uma variável 'var1' como VARCHAR2 (30) com o valor inicial de "bloco externo".
  • Linha de código 4 : Declaração de uma variável 'var2' como VARCHAR2 (30) com o valor inicial de "valor antes do bloco interno".
  • Linha de código 6: rotulando o bloco interno como "INNER_BLOCK"
  • Linha de código 8: Declaração de uma variável 'var1' no bloco interno como VARCHAR2 (30) com o valor inicial de "bloco interno".
  • Linha de código 10: Imprimindo o valor de 'var1'. Como nenhum rótulo é mencionado por padrão, ele pegará o valor de um bloco interno, imprimindo a mensagem 'inner_block'.
  • Linha de código 11: Imprimindo o valor da variável de bloco externo 'var1'. Como o bloco interno tem a variável com o mesmo nome, precisamos nos referir ao rótulo do bloco externo. Imprimindo assim a mensagem 'bloco externo'.
  • Linha de código 12: Imprimindo o valor da variável de bloco externo 'var2'. Como não há nenhuma variável com este nome presente no bloco interno, por padrão, ela obterá o valor de um bloco externo, imprimindo assim a mensagem 'valor antes do bloco interno'.
  • A variável 'var2' no bloco externo foi atribuída com o valor 'valor após o bloco interno'. Mas essa atribuição aconteceu após a definição de um bloco interno. Portanto, esse valor não está presente no bloco interno.

Exemplo 2 : Neste exemplo, vamos encontrar a diferença entre dois números, um declarado no bloco externo e outro no bloco interno. Ambos terão o mesmo nome. Vamos ver como o rótulo do bloco é útil para se referir a essas variáveis.

<>DECLAREln_val NUMBER :=5;BEGIN<>DECLAREln_val NUMBER :=3;BEGINdbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val);END;END;/

Explicação do código:

  • Linha de código 1 : Rotulando o bloco externo como "OUTER_BLOCK".
  • Linha de código 3 : Declarando uma variável 'ln_val' como NUMBER com o valor inicial de "5".
  • Linha de código 5: rotulando o bloco interno como "INNER_BLOCK"
  • Linha de código 7: Declarando uma variável 'ln_val' no bloco interno como NUMBER com o valor inicial de "3".
  • Linha de código 9: Imprimindo a diferença no valor de 'ln_val' do bloco externo e interno. O formato ". " é usado para referir essas variáveis ​​para evitar conflitos devido ao mesmo nome de variável.

Resumo

Neste tutorial, aprendemos como criar um bloco aninhado e como lidar com o escopo em blocos internos e externos. Também vimos um exemplo em que as variáveis ​​do bloco interno e externo foram referidas dentro do bloco interno.