PL-SQL
PL-SQL DELIMITADORES
A linguagem PL/SQL (Procedural Language/Structured Query
DELIMITADOR DESCRIÇÃO
Language) é uma combinação de SQL com os recursos procedurais de
linguagens de programação. Foi desenvolvido pela Oracle Corporation no +, -, *, / Adição, subtração/negação, multiplicação, divisão
início dos anos 90 para melhorar os recursos do SQL. A PL/SQL é uma das
três principais linguagens de programação incorporadas no banco de dados % Indicador de atributos
Oracle, juntamente com o próprio SQL e o Java.
' Delimitador de string de caracteres
Vale ressaltar que a linguagem é dita procedural porque permite chamada a
procedimentos (métodos, rotinas, etc.) pré-programados. Tenha em mente
. Seletor de componentes
que a SQL é declarativa, enquanto a PL/SQL é procedural.
(,) Delimitador de lista ou expressões
BLOCO PL/SQL : Indicador de variável de host
As construções PL/SQL são organizadas nos chamados blocos PL/SQL que , Separador de itens
são subdivididos em algumas áreas.
" Delimitador para identificadores com aspas
DECLARE
<seção de declarações>
BEGIN = Operador relacional
<commandos executáveis>
EXCEPTION @ Indicador de acesso remoto
<tratamento de exceções>
END;
; Terminação de uma declaração
Declarações Execução Exceções := Operador de atribuição
Define variáveis, cursores, Instruções PL/SQL executáveis Manipulação de exceções que tratam => Operador de associação
subprogramas e outros elementos erros
DECLARE BEGIN e END EXCEPTION || Operador de concatenação
OPCIONAL OBRIGATÓRIA OPCIONAL ** Operador de exponenciação
TI TOTAL para Área Fiscal e Controle
Professor Ramon Souza
2
Licensed to
PL-SQL
<<, >> Delimitador de rótulo (label) TIPOS DE DADOS
/*, */ Comentário de múltiplas linhas CATEGORIA DESCRIÇÃO
-- Comentário de única linha Valores simples sem componentes internos
Scalar
1 como numéricos, caracteres, booleanos e
.. Operador de intervalo (escalar)
datas.
<, >, <=, >= Operadores relacionais
Ponteiros para objetos que são armazenados
<>, '=, ~=, ^= Versões para NOT EQUAL separadamente em outros itens de dados,
2 Large Object (LOB)
como um texto, imagens, vídeos e
COMENTÁRIOS PL/SQL formas.
O PL/SQL suporta comentários de linha única e multilinha. Os Itens de dados que possuem componentes
comentários de linha única do PL/SQL começam com o delimitador -- (hífen Composite internos que podem ser acessados
duplo) e os comentários de várias linhas são delimitados por / * e * /. 3
(composições) individualmente. Por exemplo, coleções e
registros.
Reference
4 Ponteiros para outros itens de dados.
(referências)
TI TOTAL para Área Fiscal e Controle
Professor Ramon Souza
3
Licensed to
PL-SQL
VARIÁVEIS EM PL/SQL
A sintaxe para declarar uma variável é apresentada a seguir, sendo que o que
está entre [] é opcional e somente será usado quando aplicável.
nome_da_variável [CONSTANT] tipo_de_dados [NOT NULL] [:= |
DEFAULT valor_inicial] IF condition THEN
S;
Quanto ao escopo ou acessibilidade, uma variável pode ser: END IF;
Local Global IF-THEN
IF condition THEN
Declarada em um bloco interno. Declarada no bloco mais externo. S1;
ELSE
Acessada pelos blocos mais
Não acessível aos blocos externos.
internos. S2;
END IF;
CONDIÇÕES EM PL/SQL
As condições permitem que especificar estruturas de tomada de decisão CASE seletor
que serão avaliadas ou testadas pelo programa, juntamente com uma WHEN 'valor1'
THEN S1;
declaração ou instruções a serem executadas se a condição for determinada
como verdadeira e, opcionalmente, outras instruções a serem executadas se a WHEN 'valor2'
THEN S2;
condição for determinada como falsa.
WHEN 'valor3'
O PL/SQL apresenta alguns tipos de estruturas condicionais, entre elas IF- THEN S3;
THEN, IF-THEN-ELSE, IF-THEN-ELSEIF e CASE. ...
ELSE Sn;
CASE END CASE;
TI TOTAL para Área Fiscal e Controle
Professor Ramon Souza
4
Licensed to
PL-SQL
LOOPS SUBPROGRAMAS
Unidade/módulo de programa que executa uma tarefa específica
Subprogramas
No nível do esquema
Pode ser criado Dentro de um pacote
Dentro de um bloco
PL/SQL
LOOP LOOP FUNCTION Retornam um valor
-- sequência de declarações; Pode ser de dois tipos
END LOOP; PROCEDURE
Não retornam valor,
usados para executar ação.
WHILE WHILE condição LOOP
-- sequência de declarações;
END LOOP; PROCEDURE
FOR FOR contador IN valor_inicial .. valor_final LOOP Uma PROCEDURE é criada com base na seguinte sintaxe:
--sequência de declarações;
END LOOP; CREATE [OR REPLACE] PROCEDURE nome_da_procedure
[(nome_do_parâmetro [IN | OUT | IN OUT] tipo [, ...])]
{IS | AS}
BEGIN
< corpo_da_procedure >
END nome_da_procedure;
TI TOTAL para Área Fiscal e Controle
Professor Ramon Souza
5
Licensed to
PL-SQL
Implícito Criados automaticamente
FUNCTION CURSOR nome_cursor
IS SELECT campos
FROM tabela;
Uma FUNCTION é criada com base na seguinte sintaxe:
OPEN nome_cursor;
CREATE [OR REPLACE] FUNCTION nome_da_funcao Explícitos
Criados pelo
programador
FETCH nome_cursor
[(nome_do_parametro [IN | OUT | IN OUT] tipo [, ...])] Cursor
INTO campos;
RETURN return_tipo_de_dados
CLOSE cursor;
{IS | AS}
%FOUND TRUE se afetar linhas.
BEGIN
< corpo da função > %NOTFOUNT
TRUE se não afetar
linhas.
Atributos
END [nome_da_funcao];
TRUE se cursor está
%ISOPEN aberto.
Número de linhas
%ROWCOUNT
CURSORES afetadas.
Um cursor é um ponteiro para uma área de contexto de memória. O REGISTROS
PL/SQL controla a área de memória através de um cursor. Um cursor
Um registro é uma estrutura de dados que pode conter itens de dados de
mantém as linhas (uma ou mais) retornadas por uma instrução SQL. O
conjunto de linhas que o cursor contém é referido como o conjunto ativo. diferentes tipos. Os registros consistem em campos diferentes, semelhantes
a uma linha de uma tabela de banco de dados. Tipos de registros:
▪ Baseado em tabela: o atributo% ROWTYPE permite que um
programador crie registros baseados em tabela.
▪ Baseados em cursor: utilizar um cursor para definir um registro.
▪ Definidos pelo usuário: os registros são definidos diretamente
pelos usuários.
TI TOTAL para Área Fiscal e Controle
Professor Ramon Souza
6
Licensed to
PL-SQL
TRATAMENTO DE EXCEÇÃO Exceção
Oracle
Error
SQLCODE Lançada quando
O PL/SQL suporta o tratamento de exceções usando o bloco EXCEPTION ACCESS_INTO_NULL 06530 -6530 Valor é atribuído a um objeto nulo.
no programa, em que uma ação apropriada é tomada contra a condição de
Nenhuma das condições definidas por CASE é
erro. As exceções podem ser definidas pelo usuário ou já pré-definidas pelo CASE_NOT_FOUND 06592 -6592
selecionada e não existe cláusula ELSE.
próprio sistema. A sintaxe geral para o tratamento de exceções é a seguinte,
Método tenta acessar ou atribuir valores para coleções
em que é possível listar quantas exceções puder manipular e a exceção padrão COLLECTION_IS_NULL 06531 -6531
não inicializadas.
será tratada usando WHEN others THEN: Tentativa de armazenar valores duplicados em uma
DUP_VAL_ON_INDEX 00001 -1
coluna com índice único.
DECLARE
Tentativas de uma operação de cursor não permitida,
INVALID_CURSOR 01001 -1001
como fechar um cursor não aberto.
<seção_de_declaração>
BEGIN INVALID_NUMBER 01722 -1722
A conversão de uma cadeia de caracteres em um
número falha porque a cadeia não representa um
número válido.
<commandos executáveis>
Programa tenta efetuar logon no banco com um nome
LOGIN_DENIED 01017 -1017
EXCEPTION de usuário ou senha inválidos.
<tratamento das exceções começa aqui> NO_DATA_FOUND 01403 +100 SELECT INTO não retorna nenhuma linha.
WHEN excecao1 THEN NOT_LOGGED_ON 01012 -1012
Uma chamada de banco de dados é realizada sem estar
conectada ao banco de dados.
declarações de tratamento da exceção 1
PROGRAM_ERROR 06501 -6501 Problema interno no PL/SQL.
WHEN exception2 THEN
Cursor busca um valor em uma variável com tipo de
ROWTYPE_MISMATCH 06504 -6504
declarações de tratamento da exceção 2 dados incompatível.
WHEN exception3 THEN SELF_IS_NULL 30625 -30625
Um método membro é invocado, mas a instância do tipo
de objeto não foi inicializada.
declarações de tratamento da exceção 3
PL/SQL fica sem memória ou a memória está
STORAGE_ERROR 06500 -6500
corrompida.
........
Uma instrução SELECT INTO retorna mais de uma
WHEN others THEN TOO_MANY_ROWS 01422 -1422
linha.
declarações de tratamento padrão de exceções Ocorre um erro de aritmética, conversão, truncamento
VALUE_ERROR 06502 -6502
ou tamanho específico.
ZERO_DIVIDE 01476 1476 Tentativa de dividir um número por zero.
TI TOTAL para Área Fiscal e Controle
Professor Ramon Souza
7
Licensed to
PL-SQL
TRIGGERS
TRIGGER
Programas armazenados que são executados ou disparados automaticamente quando
alguns eventos ocorrem.
CREATE [OR REPLACE] TRIGGER nome_da_trigger
{BEFORE | AFTER | INSTEAD OF}
{INSERT [OR] | UPDATE [OR] | DELETE}
[OF coluna]
ON tabela
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN (condicao)
PACKAGES
Packages ou pacotes são objetos de esquema que agrupam tipos PL/SQL
logicamente relacionados, variáveis e subprogramas.
Package
Especificação Corpo
Interface. Código para os CREATE
CREATE
Apenas declara elementos PACKAGE
os elementos. PACKAGE declarados. BODY
TI TOTAL para Área Fiscal e Controle
Professor Ramon Souza
8
Licensed to