pl_sql parte iii
TRANSCRIPT
-
7/24/2019 Pl_sql Parte III
1/44
PL/SQL-PL/SQL-
FundamentosFundamentos
Oracle Database 11g
1
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
2/44
Funes deFunes deGrupoGrupo
Oracle Database 11g
2
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
3/44
O que so funes de grupo?O que so funes de grupo?
So funes agregadas que retornam um nico
resultado com base em vrias linas! em o"osio#s funes de uma nica lina! que retornam umresultado "ara cada lina$
Oracle Database 11g
3
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
4/44
Algumas funesAlgumas funes
AVG ([DISTINCTALL! "o#$%etorna a media dos valores da coluna$C%&NT ('[DISTINCTALL!"o#$%etorna o nmero de linas na consulta$ Se & for "assado! o nmero
total de linas e retornado$A)([DISTINCTALL!"o#$%etorna o valor m'imo do item da lista de seleo$ Observe queDIS(I)*( e +,, no t-m nenum efeito! uma ve. que o valorm'imo seria o mesmo em qualquer um dos casos$IN([DISTINCTALL!"o#$%etorna o valor m/nimo do item da lista de seleo$ Observe queDIS(I)*( e +,, no t-m nenum efeito! uma ve. que o valorm/nimo seria o mesmo em qualquer um dos casos$S&([DISTINCTALL!"o#$%etorna a soma dos valores "ara o item da lista da seleo$
Oracle Database 11g
4
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
5/44
Pro"ed*mentosPro"ed*mentos
+ Funes+ Funes eePa"otesPa"otes
Oracle Database 11g
5
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
6/44
Procedimentos e FunesProcedimentos e Funes
+s "rocedures! functions e "ac0ages so blocosidenticados$ 2les so arma.enados no banco de dadose e'ecutados quando necessrio$
3m "rocedimento 4 um sub5"rograma que e'ecutauma ao es"ec/ca$
3ma funo tamb4m 4 um sub5"rograma que com"utaum valor$
+ "rinci"al diferena entre ambos 4 que as funesretornam um valor de um ti"o "redeterminado quandoinvocados! enquando os "rocedimentos no retornamnenum valor$
Oracle Database 11g
6
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
7/44
Exemplo de ProcedureExemplo de Procedure
CREATE OR REPLACE PROCEDURE Inclui_Novo_Aluno (
v_codigo aluno!codigo"T#PE$
v_no%& aluno!no%&"T#PE$
v_&nd&'&co aluno!&nd&'&co"T#PE A)
*E+IN IN)ERT INTO alunoi (codigo$no%&$&nd&'&co
,ALUE) (v_codigo$ v_no%&$ v_&nd&'&co-
END Inclui_Novo_Aluno-
U%a v&. c'iada$ a /'oc&du'& /od& &' c0a%ada d& ou'o loco PL)L*E+IN
Inclui_Novo_Aluno(1$ 7+a'i&l8$ 7)&% End&'&co9-
END-
Oracle Database 11g
:
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
8/44
6uando a "rocedure 4 criada! ela 4 "rimeiramente
com"ilada e ento arma.enada o banco de dados$2ste c7digo com"ilado "ode ser e'ecutado de outroblobo 8,9S6,$
8armetros "odem ser "assados quando uma"rocedure 4 camada$
Pontos a serem verificadosPontos a serem verificados
Oracle Database 11g
;
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
9/44
+ m de alterar o c7digo de uma "rocedure! a"rocedure deve ser descartada e ento recriada$ +s"alavras5cave O% %28,+*2 "ermitem que ao"erao de recriar uma "rocedure se;a feito$
Se a "rocedure e'istir e se as "alavras5cave O%%28,+*2 no estiverem "resentes! a instruo*%2+(2 retornar o erro Oracle >: )ame isalread? used b? na e'isting ob;ect@$
+ssim como outras instrues *%2+(2! criar uma"rocedure 4 uma o"erao de DD,! "ortanto um*OMMI( im"licito 4 feito tanto antes como de"ois do
"rocedimento ser criado$
Pontos a serem verificadosPontos a serem verificados
Oracle Database 11g
imo,Di-i*or,Comum("##
Oracle Database 11g
1;
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
19/44
#onsideraes#onsideraes
Tano /'oc&di%&no =uano >un?@&$ no inan& do co%ando CREATE o
co%/ilado!
)& =ui&'%o co%/ilBlo &/licia%&n&$ ua%o o co%ando
ALTER PROCEDURE nome,do,procedimento CO3PILE
ALTER 0UNCTION nome,do,+un;
-
7/24/2019 Pl_sql Parte III
20/44
1B )a tabela *+%COS insira a coluna: remuneracaonumberBA
EB a.er a alterao da tabela cargos informandovalores "ara a coluna remuneracaoA
GB a.er uma funo que retorne o salrioAHB a.er uma funo que retorne o salrio atuali.ado
quando "assado o "ercentual de aumento como"armetroA
ExercciosExerccios
Oracle Database 11g
2
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
21/44
$ipos de Par%metros$ipos de Par%metros
IN 5 O valor do "armetro real 4 "assado "ara a "rocedure quando a"rocedure 4 invocada$ Dentro da "rocedure! o "armetro formal atua comouma constante 8,9S6, 5 ele 4 considerado de leitura e no "ode seralterado$ 6uando a "rocedure conclui e o controle retorna ao ambiente decamada! o "armetro real no 4 alterado$
%&T5 6ualquer valor que o "arametro real tena 4 ignorado quando a"rocedure 4 camada$ Dentro da "rocedure! o "arametro formal atua comouma variavel nao iniciali.ada 8,9S6, e! "ortanto tem um valor )3,,$ 2le"ode ser lido e escrito$ 6uando a "rocedure conclui e o controle retorna aoambiente de camada! o contedo do "arametro formal 4 atribuido ao
"aramentro real$
IN %&T5 *ombina I) e O3($ O valor do "arametro real 4 "assado "ara a"rocedure quandoa "rocedure 4 invocada$ Dentro da "rocedure! o"arametro formal atua como uma variavel iniciali.ada e "oder ser lido egravado$ 6uando a "rocedure conclui e o controle retorna ao ambiente de
camada! o conteudo do "arametro formal 4 atribuido ao "arametro real$Oracle Database 11g
21
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
22/44
Valores Padro de Par%metrosValores Padro de Par%metros
De maneira semelante #s declaraes de varivel! os"armetros formais "ara um "rocedimento ou funo "odemter valores "adro$ Se um "armetro tiver um valor "adro!ele no tem de ser "assado a "artir do ambiente de camada$
Se o for! o valor do "armetro real ser utili.ado em ve. do"adro$ 3m valor "adro "ara um "armetro 4 inclu/doutili.ando a sinta'e:
nome_do_parmetroKmodoL tipo_de_parmetro
:N D2+3,( P valor_inicial
onde nome_do_parmetro4 o nome do "arametro formal!modo4 omodo de "arametro I)! O3( ou I) O3(B!tipo_de_parmetro4 o ti"ode "arametro tanto "redenido
"elo usurioB e valor_inicial4 o valor a ser atribuido ao"arametro formal "or "adro$ (anto :N como a "alavra5caveD2+3,( odem ser utili.adas$Oracle Database 11g
22
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
23/44
Pacotes &Pac'ages(Pacotes &Pac'ages(
U% /aco& F u% o&o =u& ag'u/a logica%&n& i/o PL)L
'&lacionado$ i&n & u/'og'a%a!
+&'al%&n&$ o /aco& G% dua /a'& u%a &/&ci>ica?o
(/&ci>icaion & u% co'/o (odH$ &%o'a o co'/o$ v&.&$ no
&a n&c&B'io!
A &/&ci>ica?o conF% a d&cla'a?o do i/o$ va'iBv&i$
conan&$ &c&?@&$ cu'o'& & u/'og'a%a di/onJv&i
/a'a uo!O co'/o d&>in& o cu'o'& & u/'og'a%a & i%/l&%&na a
&/&ci>ica?o!
Oracle Database 11g
23
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
24/44
ModularidadeA8ro;eto de a"licao mais fcilA2nca"sulamento de informao! ao se"arar a
es"ecicao do cor"oA*riao de variveis globais "ersistentes "or
sessoA
Vantagens da utili"aoVantagens da utili"ao
Oracle Database 11g
24
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
25/44
Sintaxe dos PacotesSintaxe dos Pacotes
O /aco& o co%/oo /o' dua /a'&
A E/&ci>ica?o
CREATE OR REPLACE PACA2E USER.Nome,do,Pacote ISAS
Tipo,:"..."Tipo,n
Fari=-e',:"..." Fari=-e',n
0un;
-
7/24/2019 Pl_sql Parte III
26/44
* Co'/o
CREATE OR REPLACE PACA2E 1OD/ USER.Nome,do,Pacote
ISAS
PROCEDURE Procedimento,: IS Corpo,P:
PROCEDURE Procedimento,Pn IS Corpo,n
0UNCTION 0un;
-
7/24/2019 Pl_sql Parte III
27/44
Pacotes) #onsideraes *mportantesPacotes) #onsideraes *mportantes
A clBuula OR REPLACE igni>ica =u& & ao c'ia' o /aco&$ & B &ii' u% ou'o
co% o %&%o no%& &l& &'B uiuJdo /&lo novo!
Tudo o =u& &iv&' d&cla'ado na &/&ci>ica?o &'B ac&Jv&l &&'na%&n& ao
/aco&!
uando na &/&ci>ica?o d& u% /aco& no 0ouv&' d&cla'a?o d& >un?@& ou
/'oc&di%&no &l& no n&c&ia'B d& u% co'/o$ a %&no =u& &l& n&c&i& d&
>un?@& in&'na!
N&% oda a >un?@& =u& & ac0a% no co'/o do /aco& &a'o na &/&ci>ica?o$
&a o >un?@& =u& K /od&'o &' uili.ada in&'na%&n& ao /aco&!
uando d&&a'%o invoca' d&&'%inado /'oc&di%&no ou >un?o do /aco&
ua%o a ina&
No%&_do_Paco&! No%&_)u'oina(Pa'%&'o
Oracle Database 11g
2:
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
28/44
1B *riar uma "ac0age 2M8%2S+ utili.ando todas as"rocedures e funes criadas na aula
EB Incluir na "ac0age 2M8%2S+ uma "rocedure que
escreva o nome do em"regado! o cargo e o salriocom 1QR de aumento$ 3tili.e a funo criadaanteriormente "ara calcular o salrio$
ExercciosExerccios
Oracle Database 11g
2;
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
29/44
Tr*88ersTr*88ers
Oracle Database 11g
2o' &&cuado!
Pod& con&' co%ando )L & PL)L & /od& c0a%a' o'&d
/'oc&du'&!
T'igg&' o &%&l0an& a o'&d /'oc&du'& %a di>&'&% na
%an&i'a co%o o c0a%ado! En=uano u% /'oc&di%&no F
&/licia%&n& c0a%ado /o' u% uuB'io ou a/lica?o$ u% 'igg&' F
di/a'ado i%/licia%&n& /&lo )+*D (D*M)!
Oracle Database 11g
3
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
31/44
%eali.ar auditoria de determinadas aes nobanco de dadosA%eforar regras de segurana e restries de
neg7cios com"le'osA8revenir transaes invlidas$
!so de $riggers!so de $riggers
Oracle Database 11g
31
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
32/44
+s triggers "odem ser de I)S2%(!38D+(2!D2,2(2$ Dis"aradas antes ou de"ois dedeterminado evento +(2% 9 2O%2B$ 2 a
cada registro O% 2+*T %OUB
$ipos de $riggers$ipos de $riggers
Oracle Database 11g
32
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
33/44
+a,ilitao de $rigger+a,ilitao de $rigger
E% c&'a iua?@&$ /od& &' d&&Bv&l d&ailia' &%/o'a'ia%&n&
u% 'igg&'!
Po' &&%/lo$ ao ca''&ga' dado$ a d&ailia?o d& u% 'igg&' /od&
ac&l&'a' uancial%&n& a o/&'a?o!
No &nano$ io d&v& &' >&io co% aan& cuidado$ /oi /od&
i%/lica' &% u%a a& d& dado inconi&n&!
ALTER TRI22ER nome,do,trigger ENA1LE
ALTER TRI22ER nome,do,trigger DISA1LEALTER TA1LE nome,da,ta&e'a ENA1LE ALL TRI22ERS
ALTER TA1LE nome,da,ta&e'a DISA1LE ALL TRI22ERS
Pa'a &clui' u%a 'igg&' no )L
DROP TRI22ER [USER].nome,da,trigger
Oracle Database 11g
33
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
34/44
$riggers$riggers
Exemplo:
CREATE OR REPLACE TRI22ER no-o,prod
1E0ORE INSERT ON Produto*
0OR EAC5 RO41E2IN
8NE4.Unidade*,E*toGue 86 H
END
)) Para te*tar a trigger8INSERT INTO produto* FALUES(J" 7CA3ISETASPANINARO7" :K" H.:K" :HH" ?HH" 7S7#
Oracle Database 11g
34
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
35/44
For eac- ro.For eac- ro.
&m tr*88er F% .AC< %= 2 a"*onado uma:e1 por #*n>a5 Dentro do tr*88er+ :o"? podea"essar os dados da #*n>a @ue est sendo
pro"essada atua#mente5
Isso 2 rea#*1ado atra:2s dos*dent*B"adores 7N.= e 7%LD5
.sses *dent*B"adores s,o seme#>antes a uma:ar*:e# do t*po re8*stro TA.LA9DA9TIGG.%=TEP.5
De:emos o0ser:ar @ue 7%LD 2 N&LLpara tr*88ers em *nstrues INS.T+ e 7N.= 2
Oracle Database 11g
35
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
36/44
Predicados de $riggerPredicados de $rigger
Pred*"ados de tr*88er7 INS.TING+ &PDATINGe D.L.TING
&m mesmo tr*88er pode ser d*sparadopara INS.T+ &PDAT. e D.L.T.5 Dentro de umtr*88er desse t*po > tr?s unes 0oo#eanas@ue podem ser usadas para determ*nar @ua# 2a opera,o @ue est d*sparando o tr*88er5
Oracle Database 11g
36
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
37/44
1B *riar uma trigger que no "ermita incluir c7digos ;cadastrados na tabela *+%COS$
EB *riar uma trigger que no "ermita incluir na tabelade 2M8%2C+DOS c7digos de *+%COS invlidos$
ExercciosExerccios
Oracle Database 11g
3:
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
38/44
Instrues SQLInstrues SQL
Oracle Database 11g
3;
Instrutor: Mrcio Mendona
-
7/24/2019 Pl_sql Parte III
39/44
S/0 dentro da linguagemS/0 dentro da linguagemP01S/0P01S/0
A #*n8ua8em SQL (Stru"ture Quer Lan8ua8e$deBne "omo os dados do %ra"#e s,oman*pu#ados5 As "onstrues pro"edura*s
"om PL/SQL tornam-se ma*s te*s @uando"om0*nadas "om o poder de pro"essamentoda SQL+ perm*t*ndo @ue os pro8ramasman*pu#em os dados no %ra"#e5
As n*"as *nstrues SQL perm*t*dasd*retamente em um pro8rama PL/SQL s,oDLs (S.L.CT+ INS.T+ &PDAT.+ D.L.T.$*nstrues de "ontro#e de transa,o (C%IT+%LLACH555$5
Oracle Database 11g
3