PL/SQL
Danilo Braga ICC – Software II
Instituto Nacional de Telecomincações - INATEL
http://migre.me/dESmd
http://migre.me/dCTlu
Antes de começarmos a falar de PL/SQL ...
... Temos que falar de SQL
SQL (Structured Query Language) Linguagem declarativa Projetada para trabalhar com BD Relacionais Criada no início da década de 70
SQL ANSI Padronização da linguagem pela American National Standards Institute (ANSI) em 1986
8 Revisões SQL-86, SQL-89, SQL-92, SQL-1999, SQL-2003, SQL-2006, SQL-2008, SQL-2011
Pequeno Histórico
http://migre.me/dCWHf
Agora sim é sobre PL/SQL
Desenvolvida pela Oracle no início dos anos 90 para melhorar as capacidades do SQL
Adiciona ao SQL características de linguagens de procedurais
Procedural Language/Structured Query Language (PL/SQL)
É uma extensão da linguagem SQL
PL/SQL
Não é um produto separado É uma tecnologia integrada ao SGDB Oracle
É possível trabalhar de forma tanto declarativa (SQL) quanto de forma procedural (PL/SQL)
PL/SQL
PL/SQL
Suporta conceito de packages
Agrupamento de funções relacionadas
Provê um mecanismo de captura e
tratamento de erros
Aplicações para a manipulação grandes volumes
de dados
Tabelas com milhões ou bilhões de registros
Purge (limpeza)
Backup
Rotinas de atualização/exclusão em massa
Reports/BI
Para que eu preciso disso ?
Por ser executado dentro do Oracle Dados não precisam entrar/sair do SGBD
Não há sobrecarga de tráfego pela rede
Não são necessárias API's intermediárias para acesso a dados
ODBC ou JDBC, etc
Existem Vantagens ?
http://migre.me/dCX9T
Mostra como isso funciona logo!!
Chega dessa teoria chata...
DECLARE (OPTIONAL)
variable_declarations
BEGIN
program_code
EXCEPTION (OPTIONAL)
exception_handlers
END;
declarar variáveis, constantes, registros e cursores
Lógica do programa, como loops, instruções condicionais e SQLs
Utilizada para tratar os erros gerados durante a execução
Anatomia de uma aplicação
Funções Embutidas
Repetição
Condicionais
Estruturas da linguagem
Condicionais
IF-THEN Statement
IF condition THEN statements
END IF;
IF-THEN-ELSIF Statement
IF condition1 THEN
statement1 ELSIF condition2 THEN
statement2
ELSE
statement3
END IF;
CASE Statement CASE type
WHEN 'A' THEN statement1; WHEN 'B' THEN statement2
ELSE statementElse; END CASE; .
Repetição
LOOP
LOOP statements
END LOOP; EXIT
LOOP ... IF num < 5 THEN EXIT; END IF; END LOOP;
EXIT WHEN
LOOP
...
EXIT WHEN num < 5;
END LOOP;
Repetição
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
Repetição
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;
Evita a necessidade de reescrita de código
Todas as funções já foram testadas pela ORACLE
Fornecem mais usabilidade ao PL/SQL
Grande variedade de funções
Funções Embuitdas
Funções Embutidas
Character / String Functions: Ascii Convert Lower Soundex AsciiStr Decompose Lpad Substr Chr Dump Ltrim Translate Compose Initcap Replace Trim Concat Instr Rpad Upper || Length Rtrim VSize
||
‘A’||‘B’||‘C’||‘D’ -- ABCD
Advanced Functions: BFilename Group_ID NULLIF User Cardinality Lag NVL UserEnv Case Statement Lead NVL2 Coalesce LNNVL Sys_Context Decode NANVL Uid
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
Funções Embutidas
Mathematical Functions: Abs Covar_pop Max Sqrt Acos Covar_samp Median StdDev Asin Count Min Sum Atan Cume_Dist Mod Tan Atan2 Dense_Rank Power Tanh Avg Exp Rank Trunc (numbers) Bin_To_Num Extract Remainder Trunc (dates) BitAnd Floor Round (numbers) Var_pop Ceil Greatest Round (dates) Var_samp Corr Least Sign Variance Cos Ln Sin Cosh Log Sinh
Date Functions: Add_Months Last_Day Round To_Date Current_Date LocalTimestamp SessionTimeZone Current_Timestamp Months_Between Sysdate DbTimeZone New_Time SysTimestamp From_Tz Next_Day To_Char
Funções Embutidas
Procedures
Triggers
Functions
Códigos dentro das aplicações
Java, C#, C++, ...
Onde usar estas estruturas
Vamos “botar” a mão na massa
Requisitos “Equalizador salários”
Os salários devem ser reajustados • 15 % para maiores 40 anos
• 10 % para maiores de 35 anos
• 5 % para maiores de 30 anos
Se o salário ajustado for maior que a média salarial, o salário será o mesmo
• A média deve desconsiderar os salários extremos(maior e menor)
Todas as alterações na base devem ser “logadas”
Por hoje é isso !!!
E SE AINDA
TIVERMOS TEMPO ...
PERGUNTAS ??
http://migre.me/dDb41 http://migre.me/dDbda
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-Basics-
of-PLSQL.htm
http://imasters.com.br/artigo/1754/oracle/examinando-alguns-exemplos-pl-sql/
Quem me ajudou !