Tópico: Identify the different types of PL/SQL blocks
Autor: Rudak | Publicado: 2011-07-21T09:35:00-07:00




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.&nbsp;&nbsp;Segue a estrutura padrão de um bloco PL/SQL:




[DECLARE]&nbsp;&nbsp;--Isto não é obrigatório!
&nbsp;--declaração de variáveis, cursores, etc.
 BEGIN
 --seu código aqui!
 [EXCEPTION]&nbsp;--Isto também não é obrigatório
&nbsp;--tratamento de exceções (falhas)
 END; 




Entendendo:




Seção&nbsp;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&nbsp;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&nbsp;Tratamento de exceção/EXCEPTION: Especifica as ações a desempenhar quando erros e condições anormais surgem na seção executável (Opcional).





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


  

BEGIN

&nbsp; 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”?


  

-&nbsp;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 
  

&nbsp; BEGIN 

&nbsp;&nbsp;&nbsp; NULL;

&nbsp; 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: 
&nbsp;





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 

&nbsp; BEGIN 

&nbsp;&nbsp;&nbsp; NULL;

&nbsp; 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

&nbsp; 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.