quinta-feira, 21 de julho de 2011

Tópico: Identify the different types of PL/SQL blocks

Boa tarde pessoal! Acredito que já abordamos este assunto, contudo, vamos nos aprofundar um pouco mais agora. O que podemos entender por “Identificar os diferentes tipos de blocos PL/SQL”? Se você não entende nada, vamos por partes: o que podemos entender por um “bloco PL/SQL”?

Bloco PL/SQL
Ao meu entender, podemos considerar um bloco PL/SQL como sendo aquele bloco que possui as estruturas mínimas para se executar um comando PL/SQL sem gerar erros (diferente de exceções); Se um bloco gera erro, ele não executa, logo, não é um bloco PL/SQL válido.  Segue a estrutura padrão de um bloco PL/SQL:

[DECLARE]  --Isto não é obrigatório!
 --declaração de variáveis, cursores, etc.

BEGIN
--seu código aqui!
[EXCEPTION] --Isto também não é obrigatório
 --tratamento de exceções (falhas)

END;


Entendendo:

Seção Declarativa/DECLARE: Contém todas as variáveis, constantes, cursores e exceções definidas pelo usuário que são referenciadas nas seções executável e declarativa (Opcional)
Seção Executável/BEGIN: Contém instruções SQL para manipular dados no banco de dados e instruções PL/SQL para manipular dados no bloco (Obrigatória)
Seção Tratamento de exceção/EXCEPTION: Especifica as ações a desempenhar quando erros e condições anormais surgem na seção executável (Opcional).


 Como já foi citado antes, segue o bloco PL/SQL mínimo aceitável:


BEGIN
  NULL;
END;

Este bloco é um bloco PL/SQL aceitável, pois ao executá-lo, nenhum erro ocorre apesar deste comando ser inútil...
Este tipo de bloco é conhecido com Bloco Anônimo. Anônimo – Sem identificação, sem nome. E o que tornaria um bloco em “não anônimo”?


Bloco de Procedimento/Procedural: nada mais é do um bloco PL/SQL nomeado. A grande vantagem sobre um bloco PL/SQL anônimo é que pode ser compilado e armazenado no banco de dados como um objeto de schema. Graças a essa característica as procedures são de fácil manutenção, o código é reutilizável e permitem que trabalhemos com módulos de programa.


Ex.:

CREATE PROCEDURE INUTIL AS

  BEGIN
    NULL;
  END;


Olhem só que legal! Criamos uma procedure (bloco PL/SQL nomeado e armazenado) que não serve pra p!@#$ nenhuma! Mas criamos! Se você estiver usando o Oracle SQL Developer, pode visualizá-la aqui:
 
Como visualizar uma procedure criada no Oracle SQL Developer

It’s alright! It’s ok! Vamos tentar executar novamente o mesmo bloco? Só para ver o que acontece:


Erro gerado ao tentar se executar novamente o mesmo bloco PL/SQL pela segunda vez


Porque deu erro se a procedure não está errada? Pelo simples motivo de ela já existir! Podemos proceder de duas formas: ou atualizamos a nossa procedure, ou mudamos o nome e criamos outra. Para atualizar, basta adicionarmos o comando OR REPLACE logo após o comando CREATE, deixando o nosso bloco assim:

CREATE OR REPLACE PROCEDURE INUTIL AS
  BEGIN
    NULL;
  END;

Entendendo o bloco: através no nome da procedure, o bloco verifica se já existe outra procedure com o mesmo nome; se não existir, ele cria (CREATE). Se existir, ele substitui (OR REPLACE). Simples assim.


Certo, mas e agora, o que faço com uma procedure após cria-la? Podemos executá-la em outro bloco PL/SQL! Qual o nome da nossa procedure? INUTIL! Então basta chama-la da seguinte forma:


BEGIN
  INUTIL;
END;

Como a procedure INUTIL nada faz, este bloco também nada fará. Mas que tal darmos uma razão de ser à nossa procedure? Para isto, seguiremos para o próximo tópico - Output messages in PL/SQL.

Nenhum comentário:

Postar um comentário