Professional Documents
Culture Documents
1
1
O que PL/SQL?
Benefcios da Linguagem
Um programa pode ser escrito em blocos,
com variveis locais e tratamento de
erros;
Performance;
Potabilidade - pode ser usado em qualquer plataforma
que acesse um banco de dados Oracle.
Estrutura do PL/SQL
O PL/SQL uma linguagem estruturada em
blocos lgicos que podem conter um nmero
qualquer de sub-blocos aninhados.
Um bloco PL/SQL pode ser um bloco annimo ou
um sub-programa ou uma trigger.
Blocos Estruturados
DECLARE(Opcional)
Variveis, cursores, definio de excees
definidas pelo desenvolvedor
BEGIN (Obrigatrio)
Declarao SQL
Declarao PL SQL
EXCEPTION (Opcional)
Aes a serem tomadas caso ocorra algum
erro
END; (Obrigatrio)
5
Bloco Annimo
um
bloco de comandos sem nome.
declarado na aplicao no ponto
em que ser executado e
passado para a execuo em
tempo de execuo.
6
Sub-Programas
Consistem em Procedures e Funes.
Podem ser armazenados no banco de dados
como objetos independentes, como parte
de um pacote ou como mtodos de um
tipo de objeto.
Triggers
Consistem em um bloco PL/SQL que est
associado a um evento que ocorre no
banco de dados.
11
12
13
Blocos Aninhados
Blocos podem estar aninhados, inclusive na
seo de EXCEPTION.
14
Blocos aninhados
BEGIN
Aes do bloco principal
DECLARE
Declarao de objetos
BEGIN
Aes do bloco interno
EXCEPTION
O que fazer na ocorrncia de erros do bloco interno
END;
Outras aes do bloco principal
EXCEPTION
WHEN erro THEN
BEGIN
Aes do bloco interno do EXCEPTION
EXCEPTION
Aes a serem tomadas na ocorrncia de erros no bloco interno de
EXCEPTION.
END;
END;
15
Variveis
16
Uso de Variveis
As variveis podem ser utilizadas para armazenar
temporariamente os dados e manipular valores.
O nome atribudo a uma varivel deve ter no
mximo 30 posies. Pode possuir letras, nmeros
e caracteres especiais como underscore, ponto
simples, dlar.
Elas devem ser declaradas e inicializadas na
seo declarativa. Usada e atribuda novos valores
na seo de executveis. Passada como
parmetros em subprogramas PL/SQL
No existe distino entre letras maisculas e
minsculas.
Instrutor: Mrcio Mendona
Oracle Database 11g
17
Declarao de Variveis
18
Tipos de Dados
19
Character
CHAR(<n>) armazena string de tamanho fixo. Tamanho
default 1, mximo 32.767. Subtipo: CHARACTER
VARCHAR2(<n>) armazena string de tamanho varivel.
possvel armazenar string de at 32.767 bytes. Subtipo:
STRING
VARCHAR(<n>) sinnimo para o tipo VARCHAR2.
NCHAR(<n>) e NVARCHAR2(<n>) possuem as mesmas
caractersticas dos tipos CHAR e VARCHAR2 e so usados
para armazenar dados NLS (National Language Support). A
arquitetura Oracle NLS permite armazenar, processar e
recuperar informaes em linguagens nativas.
LONG um tipo de dados que se tornou obsoleto com a
chegada dos tipos LOB (Large Object). O tipo LONG armazena
strings
deMendona
tamanhoOracle
varivel
de 11g
no mximo 32.760 bytes.
Instrutor:
Mrcio
Database
20
Numrico
Usado para armazenar dados numricos com preciso de at
38 digitos.
NUMBER(<x>, <y>) onde <X> corresponde ao nmero de
dgitos e <Y> o
nmero de casas decimais. Valores inseridos em colunas
numricas com nmero de casas decimais menor que o dado
inserido sero arredondados. Subtipos: DEC, DECIMAL,
DOUBLE PRECISION, FLOAT, INTEGER, INT, NUMERIC, REAL,
SMALLINT.
BINARY_INTEGER utilizado para armazenar inteiros com sinal,
que variam de 2147483647 a 2147483647. Requerem
menos memria que tipos NUMBER. Subtipos: NATURAL
(n>=0), NATURALN (n>=0 not null), POSITIVE (n>0),
POSITIVEN (n>0 not null), SIGNTYPE (-1, 0, 1).
PLS_INTEGER Possui as mesmas caractersticas do tipo
21
BINARY_INTEGER, entretanto possui melhor performance para
clculos.
Instrutor: Mrcio Mendona
Data
O tipo DATE permite valores de data e hora. O formato
padro definido pelo parmetro NLS_DATE_FORMAT. O
Oracle armazena internamente a data em formato de nmero
juliano com a parte fracionria usada para controlar a hora.
Uma data Juliana corresponde ao nmero de dias desde 1 de
Janeiro de 4712 A.C.
Para operaes aritmticas com datas no Oracle, basta
adicionar ou subtrair nmeros inteiros ou fracionrios. Por
exemplo, SYSDATE + 1 para somar uma dia, 1/24 para
acrescentar uma hora, 1/(24x60) ou 1/1440 para acrescentar
1 minuto e 1/(24x60x60) ou 1/86400 para um segundo.
22
Lob
Large Object (LOB) datatypes so usado para armazenar
dados no estruturados como imagens, arquivos binrios. Os
tipos LOBs podem armazenar at 4GB de informao. A
manipulao dos tipos LOB feita atravs da package
DBMS_LOB.
- BLOBBinary Large Object: Armazena at 4GB de dados
binrios no banco
-CLOBCharacter Large Object: Armazena at 4GB de dados
carter
- BFILEBinary File: Armazena at 4GB de dados em arquivos
binrios externos. Uma coluna BFILE armazena um ponteiro
para o arquivo armazenado no sistema operacional.
23
Booleano
O nico tipo de dados na famlia booleana o BOOLEAN.
Variveis booleanas so utilizadas em estruturas de controle
da PL/SQL como as instrues IF-THEN-ELSE e de LOOP.
Podem conter apenas os valores TRUE, FALSE ou NULL.
24
Utilizando %TYPE
Utilizado para declarar uma varivel com o mesmo tipo de uma
coluna de alguma tabela, ex:
DECLARE
v_Nome STUDENTS.FIRST_NAME%TYPE;
v_Idade PLS_INTEGER NOT NULL :=0;
v_IdadeTemp v_Idade%TYPE; --no herda restrio
nem valor default
25
Variveis de Host
So variveis declaradas no ambiente operacional que
podem ser referenciadas nos comandos PL/SQL.
Sintaxe:
:nome_da_varivel := expresso;
Onde expresso pode ser uma varivel, um valor,
uma expresso usada para chegar a um valor especfico.
26
27
28
Funes de caracter
que retornam
valores caracter
29
Funes Pr Definidas
CHR (x[using nchar_cs])
Retorna o caractere que tem o valor equivalente ao x no conjunto de
caracteres do banco de dados. CHR e ASCII so funes opostas.
CONCAT (string1, string2)
Retorna string1 concatenada com string2. Essa funo idntica ao operador
|| .
INITCAP (string)
Retorna string com o primeiro caractere de cada palavra em letra maiscula e
os caracteres restantes de cada palavra em letras minsculas.
30
Funes Pr Definidas
LOWER (string)
Retorna string com todos os caracteres em letras minsculas. Quaisquer
caracteres que no forem letras permanecem intactos. Se string tiver o tipo de
dados CHAR, o resultado tambm ser CHAR. Se string for VARCHAR2, o
resultado ser VARCHAR2.
LPAD (String1, x[string2])
Retorna string1 preenchida esquerda at o comprimento x com os caracteres
em string2.
LTRIM (String1,String2)
Retorna string1 com os caracteres mais esquerda aparecendo em string2
removidos. string2 assume o padro de um espao em branco.
31
Funes Pr Definidas
REPLACE (string, string_a_pesquisar [string_substituta])
Retorna string com cada ocorrncia de string_a_pesquisar susbstituda por
string_substituta.
RPAD (string1, x, [string2])
Retorna string1, com os caracteres mais direita que aparecem em string2,
removidos. A string2 assume o padro de um espao em branco.
TRANSLATE (string, str_de, str_para)
Retorna string com todas as ocorrncias de cada caractere em
str_de_substitudo pelo caractere correspondente em str_para.
32
Funes Pr Definidas
TRIM([{{LEADING|TRAILING|BOTH}[aparar_char])|
aparar_char}FROM]string)
Retorna string com as ocorrncias inicial, final ou ambas de aparar_char
removidas.
UPPER (string)
Retorna string com todas as letras em maisculas.
SUBSTR
Sintaxe:
SUBSTR (string, a[,b])
Retorna uma parte da string que inicia no caractere a, com o comprimento dos
caracteres b. Se a for 0, tratado como 1 (o incio da string). Se a for positivo,
os caracteres que retornam so contados da esquerda. Se a for negativo, os
caracteres retornam iniciando do final da string e so contados da direita. Se
33b
no estiver presente, a string inteira assumida como padro. Se b for menor
que 1, NULL retornado. Se um valor de ponto flutuante for passado para a e
b, o valor primeiro truncado para um inteiro. O tipo de retorno sempre do
Instrutor: Mrcio Mendona
Oracle Database 11g
mesmo tipo da string.
Funes de caracter
que retornam valores
numricos
34
Funes Pr Definidas
ASCII (string)
Retorna a representao decimal do primeiro byte de string no conjunto de
caracteres do banco de dados.
INSTR (string1,string2 [,a] [,b])
Retorna a posio dentro de string 1 onde string2 est contida, com a e b
medidos em caracteres.
LENGTH (string)
Retorna o comprimento de string medido em caracteres.
INSTR
Sintaxe:
INSTR (string1, string2 [,a] [,b])
Retorna a posio dentro de string1 em que string2 est contida.
35
Funes numricas
36
Funes Pr Definidas
MOD(x,y)
Retorna o resto de x dividido por y. Se y for 0, x retomado.
ROUND(x[,y])
Retorna x arredondado para y casas direita do ponto decimal. Y assume o
padro de 0, o qual arredonda x para o inteiro mais prximo. Se y for negativo,
os dgitos esquerda do ponto decimal so arredondados. Y deve ser um
inteiro.
TRUNC (x,[,y])
Retorna x truncado (em oposio a arredondado ) para y casas decimais. Y
assume o padro de 0, o que trunca x para um valor de inteiro. Se y for
negativo, os dgitos esquerda do ponto decimal so truncados.
37
Funes de Datas
38
Funes Pr Definidas
ADD_MONTHS(d,x)
Retorna a data d mais x meses. X pode ser qualquer inteiro. Se o ms
resultante tiver menos dias que o ms d, o ltimo dia do ms resultante
retornado. Se no, o resultado tem o mesmo componente de dia que d. O
componente de hora de d e o resultado so os mesmos.
LAST_DAY
Retorna a data do ltimo dia do ms que contm d.Essa funo pode ser
utilizada para determinar quantos dias restam no ms atual.
MONTHS_BETWEEN
Retorna o nmero de meses entre a data1 ea data2.
SYSDATE
Retorna a data e a hora atual no tipo DATE.
TRUNC (d,[,formato])
Retorna a data d truncado para a unidade especificada por formato.
Instrutor: Mrcio Mendona
39
Escopo de Variveis
O escopo de uma varivel a parte do programa onde a varivel
pode ser acessada antes de ser liberada da memria.
A visibilidade de uma varivel a parte do programa
onde a varivel pode ser acessada sem ter de qualificar a
referncia.
DECLARE
x number;
BEGIN
........
DECLARE
y number;
BEGIN
........
........
END;
..........
Instrutor: Mrcio
END;Mendona
40
Operadores
O operador mais bsico na PL/SQL o de atribuio. A atribuio de
41
Outros Operadores
42
Expresses Booleanas
Todas as estruturas de controle PL/SQL envolvem
expresses booleanas, tambm conhecidas como
condies.
Uma expresso booleana qualquer expresso que
avaliada como um valor booleano (TRUE, FALSE ou
NULL).
43
44
Criao de Tabelas
Create table alunos as
(codigo number(3),
nome varchar2(50),
endereco varchar2(150),
codigo_profissao varchar2(50));
Create table profissoes as
(codigo number(2),
descricao varchar2(50));
45
Inserindo Registros
Insert into profissoes
(codigo, descricao) values (1,Analista de
Sistemas);
Insert into alunos
(codigo, nome, endereco, codigo_profissao) values
(1,Maria,Av Afonso Pena, 600,1);
46
Exemplo de Declarao
DECLARE
v_desc varchar2(50);
BEGIN
SELECT descricao INTO v_desc
FROM profissoes
WHERE codigo = 1;
END;
47
49
DDL X DML
SQL apresenta uma srie de comandos que permitem a definio
dos dados, chamada de DDL ( Data Definition Language) ,
composta entre outros pelos comandos Create, que destinado
a criao do Banco de Dados, das tabelas que o compe, alm
das relaes existentes entre as tabelas. Como exemplo de
comandos da classe DDL temos os comandos Create, Alter e
Drop.
Os comandos da srie DML ( Data Manipulation Language),
destinados a consultas, inseres, excluses e alteraes em um
ou mais registros de uma ou mais tabelas de maneira
simultnea. Com exemplo de comandos da classe DML temos os
comandos Select, Insert, Update e Delete.
50
Comandos SQL
51
52
Controle de Transaes
Para o ORACLE uma transao DML vai comear no
primeiro comando seguinte a um COMMIT ou
ROLLBACK, e vai terminar no prximo COMMIT ou
ROLLBACK.
Estas aes podem ocorrer dentro de um bloco
PL/SQL, serem controladas manualmente(atravs da
ferramenta utilizada) ou atravs de um evento do
sistema.
Os comandos de controle de transaes so
pemitidos em um bloco PL/SQL .
Instrutor: Mrcio Mendona
53
Controle de Transaes
Exemplo:
BEGIN
UPDATE
Detalhes_do_Pedido
SET
Desconto = 10
WHERE
Quantidade > 1000;
IF SQL%ROWCOUNT > 20
THEN ROLLBACK;
ELSE COMMIT;
END IF;
END;
Instrutor: Mrcio Mendona
54
55
Exemplo:
INSERT INTO funcionarios
SELECT max(cod_funcionario) + 1, 'fulano', sysdate,777,1000,2000
FROM funcionarios;
56
Tratamento de
Excesses
57
Tratamento de Excees
Em PL/SQL, um aviso ou condio de erro
denominado uma exceo.
Excees podem ser definidas internamente ou pelo
usurio.
Uma exceo pr-definida disparada implicita e
automaticamente pelo sistema. Excees definidas
pelo usurio devem ser escritas em rotinas separadas
e disparadas explicitamente
58
Tratamento de Excees
Exemplos de Excees Pr-definidas:
59
Tratamento de Erros
Quando um erro ocorre, uma exceo disparada, a
execuo normal interrompida e o controle
passado para a parte de tratamento de excees do
bloco.
Se uma exceo encontrada no tem tratamento
ento o bloco PL/SQL terminado com a mensagem:
UNHANDLED EXCEPTION.
60
Tratamento de Erros
Exemplo de declarao de uma
Exception:
DECLARE
nome EXCEPTION;
...........
BEGIN
...........
EXCEPTION
WHEN no_data_found THEN
...........
WHEN two_many_rows THEN
...........
END;
61
Capturando Excees
Na seo EXCEPTION pode ser definida uma exceo que
capture uma outra exceo que no foi definida, quando esta
ocorrer.
Exemplo:
DECLARE
preco NUMBER(5,2);
BEGIN
SELECT
Preco_Unitario
INTO
preco
FROM
Produtos
WHERE
Cod_Produto = 1;
IF preco > 120 THEN
UPDATE Produtos
SET Preco_Unitario = 90
WHERE Cod_Produto = 1
END IF;
END;
Instrutor: Mrcio Mendona
62
Capturando Excees
DECLARE
preco NUMBER(5,2);
BEGIN
SELECT Preco_Unitario
INTO preco
FROM Produtos
WHERE Cod_Produto = 3;
IF preco > 120 THEN
UPDATE Produtos
SET Preco_Unitario = 90
WHERE Cod_Produto = 3;
END IF;
EXCEPTION
WHEN no_data_found THEN
INSERT INTO error_tab VALUES ('Cdigo no cadastrado');
WHEN too_many_rows THEN
INSERT INTO error_tab VALUES ('Mais de um produto com cdigo 1');
WHEN others THEN
INSERT INTO error_tab VALUES ('Erro ocorrido no bloco');
END;
Instrutor: Mrcio Mendona
63