pl_sql parte iii

Upload: sator-discordiae

Post on 20-Feb-2018

228 views

Category:

Documents


0 download

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