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”?
[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;
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:
--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