PL/SQL
Danilo BragaICC – Software II
Instituto Nacional de Telecomincações - INATEL
http://migre.me/dESmd
Senta que lá vem a história
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 ANSIPadronização da linguagem pela American National Standards Institute (ANSI) em 19868 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 OracleDados não precisam entrar/sair do SGBDNã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 THENstatements
END IF;
IF-THEN-ELSIF Statement
IF condition1 THEN
statement1 ELSIF condition2 THEN
statement2 ELSE
statement3END IF;
CASE StatementCASE 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ódigoTodas 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 SoundexAsciiStr Decompose Lpad SubstrChr Dump Ltrim TranslateCompose Initcap Replace
TrimConcat Instr Rpad Upper|| Length Rtrim VSize
||‘A’||‘B’||‘C’||‘D’ -- ABCD
Advanced Functions:BFilename Group_ID NULLIF UserCardinality Lag NVL UserEnvCase Statement Lead NVL2Coalesce LNNVL Sys_ContextDecode NANVL Uid
Decodedecode( 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 SqrtAcos Covar_samp Median StdDevAsin Count Min SumAtan Cume_Dist Mod TanAtan2 Dense_Rank Power TanhAvg Exp Rank Trunc (numbers)Bin_To_Num Extract Remainder Trunc (dates)BitAnd Floor Round (numbers) Var_popCeil Greatest Round (dates) Var_sampCorr Least Sign VarianceCos Ln SinCosh Log Sinh
Date Functions:Add_Months Last_Day Round To_DateCurrent_Date LocalTimestamp SessionTimeZoneCurrent_Timestamp Months_Between Sysdate
DbTimeZone New_Time SysTimestampFrom_Tz Next_Day To_Char
Funções Embutidas
Procedures
Triggers
Functions
Códigos dentro das aplicaçõesJava, 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 !!!
OBRIGADO!! E SE AINDA TIVERMOS TEMPO ...
PERGUNTAS ??
http://migre.me/dDb41http://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 !