Você está na página 1de 27

Instituto Nacional de Telecomincaes - INATEL

PL/SQL
Danilo Braga
ICC Software II
http://migre.me/dESmd

Antes de comearmos a
falar de PL/SQL ...

... Temos que falar de SQL


http://migre.me/dCTlu

Pequeno Histrico
SQL (Structured Query Language)
Linguagem declarativa
Projetada para trabalhar com BD Relacionais
Criada no incio da dcada de 70

SQL ANSI
Padronizao da linguagem pela American National
Standards Institute (ANSI) em 1986
8 Revises
SQL-86, SQL-89, SQL-92, SQL-1999,
SQL-2003, SQL-2006, SQL-2008, SQL-2011

Agora sim sobre PL/SQL


http://migre.me/dCWHf

PL/SQL
uma extenso da linguagem SQL

Desenvolvida pela Oracle no incio dos anos


90 para melhorar as capacidades do SQL
Adiciona ao SQL caractersticas de linguagens
de procedurais
Procedural Language/Structured Query Language (PL/SQL)

PL/SQL
No um produto separado
uma tecnologia integrada ao SGDB Oracle

possvel trabalhar de forma tanto


declarativa (SQL) quanto de forma procedural
(PL/SQL)

PL/SQL
Suporta conceito de packages
Agrupamento de funes relacionadas

Prov um mecanismo de captura e


tratamento de erros

Para que eu preciso disso ?


Aplicaes para a manipulao grandes volumes
de dados
Tabelas com milhes ou bilhes de registros
Purge (limpeza)
Backup
Rotinas de atualizao/excluso em massa
Reports/BI

Existem Vantagens ?
Por ser executado dentro do Oracle
Dados no precisam entrar/sair do SGBD
No h sobrecarga de trfego pela rede

No so necessrias API's
intermedirias para acesso a dados
ODBC ou JDBC, etc

Chega dessa teoria chata...

Mostra como isso funciona logo!!


http://migre.me/dCX9T

Anatomia de uma aplicao


DECLARE (OPTIONAL)
variable_declarations
BEGIN
program_code
EXCEPTION (OPTIONAL)
exception_handlers
END;

declarar variveis,
constantes, registros e
cursores
Lgica do programa,
como loops, instrues
condicionais e SQLs
Utilizada para tratar os
erros gerados durante a
execuo

Estruturas da linguagem
Condicionais

Repetio

Funes Embutidas

Condicionais
IF-THEN Statement
IF condition THEN
statements
END IF;

IF-THEN-ELSIF Statement
IF condition1 THEN

statement1
ELSIF condition2 THEN

CASE Statement
CASE type
WHEN 'A' THEN statement1;
WHEN 'B' THEN statement2

ELSE statementElse;
END CASE;

statement2
ELSE

statement3
END IF;

Repetio
LOOP
LOOP
statements
END LOOP;

EXIT WHEN
LOOP

...
EXIT WHEN num < 5;

END LOOP;

EXIT
LOOP
...
IF num < 5 THEN
EXIT;
END IF;
END LOOP;

Repetio
WHILE-LOOP

WHILE total < 25 LOOP

total := total + inc.


END LOOP;

FOR-LOOP
FOR counter IN [REVERSE] m..n LOOP
statements;
END LOOP;

FOR-LOOP
FOR i IN reverse 1..3 LOOP
dbms_output.put_line(i);

END LOOP;
Resultado: 3 2 1

Repetio
FOR row IN (SELECT * FROM empregado) LOOP
dbms_output.put_line(row.nome);

END LOOP;

FOR row IN (SELECT * FROM empregado) LOOP


EXIT WHEN UPPER(row.nome) LIKE 'MARIA%';
END LOOP;

Funes Embuitdas
Grande variedade de funes
Fornecem mais usabilidade ao PL/SQL
Evita a necessidade de reescrita de cdigo
Todas as funes j foram testadas pela ORACLE

Funes Embutidas
Character / String Functions:
Ascii
AsciiStr
Chr
Compose
Concat
||

Convert
Decompose
Dump
Initcap
Instr
Length

Lower
Lpad
Ltrim
Replace
Rpad
Rtrim

Soundex
Substr
Translate
Trim
Upper
VSize

||
A||B||C||D

-- ABCD

Funes Embutidas
Advanced Functions:
BFilename
Cardinality
Case
Coalesce
Decode

Group_ID
Lag
Statement
LNNVL
NANVL

NULLIF
NVL
Lead
Sys_Context
Uid

User
UserEnv
NVL2

Decode
decode( expression , search , resultTrue, resultFalse)
SELECT decode(avaliacao , 3, TIMO,
2, BOM,
REGULAR') FROM empregado;

NVL
NVL(nome, 'n/a')

-- n/a caso o nome


-- seja NULL

Funes Embutidas
Mathematical Functions:
Abs
Acos
Asin
Atan
Atan2
Avg
Bin_To_Num
BitAnd
Ceil
Corr
Cos
Cosh

Covar_pop
Covar_samp
Count
Cume_Dist
Dense_Rank
Exp
Extract
Floor
Greatest
Least
Ln
Log

Max
Median
Min
Mod
Power
Rank
Remainder
Round (numbers)
Round (dates)
Sign
Sin
Sinh

Sqrt
StdDev
Sum
Tan
Tanh
Trunc (numbers)
Trunc (dates)
Var_pop
Var_samp
Variance

Date Functions:
Add_Months
Current_Date
Current_Timestamp
DbTimeZone
From_Tz

Last_Day Round
LocalTimestamp
Months_Between
New_Time
Next_Day

To_Date
SessionTimeZone
Sysdate
SysTimestamp
To_Char

Onde usar estas estruturas


Procedures
Triggers
Functions
Cdigos dentro das aplicaes
Java, C#, C++, ...

Vamos botar a mo na massa

Requisitos
Equalizador salrios
Os salrios devem ser reajustados
15 % para maiores 40 anos
10 % para maiores de 35 anos
5 % para maiores de 30 anos

Se o salrio ajustado for maior que a mdia salarial, o


salrio ser o mesmo
A mdia deve desconsiderar os salrios extremos(maior
e menor)

Todas as alteraes na base devem ser logadas

Por hoje isso !!!


E SE AINDA
TIVERMOS TEMPO ...

PERGUNTAS ??

http://migre.me/dDb41
http://migre.me/dDbda

Quem me ajudou !

http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/04_struc.htm
http://www.techonthenet.com/oracle/functions/
http://www.developer.com/tech/article.php/777761/Day-1-Learning-the-Basicsof-PLSQL.htm

http://imasters.com.br/artigo/1754/oracle/examinando-alguns-exemplos-pl-sql/

Você também pode gostar