Sie sind auf Seite 1von 7

PROGRAMAO EM BANCO DADOS Store Procedure e Trigger

a tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicaes. Aplicao 1 aplicao 2 aplicao 3 SG !

Banco de Dados

"or meio dos SG!

- Sistema Gerenciador de !anco de

ados - #

poss$vel gerenciar o acesso a dados em %m ! . A S&' - ling%agem de cons%lta estr%t%rada - ( # %ma ling%agem padro A)S* para manip%lar dados por meio de %m sistema gerenciador de banco de dados. A SQL pode ser dividida e ! su"#$i%guage%s&

' - ling%agem de definio de dados +' - ling%agem de controle de dados ,' - ling%agem de manip%lao de dados

-s SG ! .devem/ disponibili0ar rec%rsos para manip%lao de dados por meio de "' 1ling%agens procedimentais2( 34 5%e a S&' # %ma ling%agem no procedimental.

Nota de Aula Prof. Sidney Vieira

678 Linguagem procedimental 9eadln1:2; <= 7>7; "rintln172; "rintln1:2; --------------------------------------------------------------------------A programao em "' # feita por meio de f%nction 1f%no2 Store "roced%re 1procedimentos arma0enada2 e @igger 1gatilho2. +ada SG ! tem s%a maneira prApria para tratar esses elementos de programao. As sinta7e apresentadas a seg%ir referem-se ao ambiente "ostgres5l. linguagem no procedimenta select 7(: from ra$0es ?here : = 7>7 -------------------------------------------------------------------------------

Store Procedure
- postgres5l emprega o conceito de f%nction para definir store proced%re 1 procedimentos arma0enados2 Sintexe bsica: +reate f%nction nomeBdaBf%no 1tipoBdadoBA( tipoBdadoB!( C tipoBdadoB+2 9et%rn tipo AS .corpo da f%no/ 'A)GDAG6 Enome da ling%agem %sada no corpoE entre as ling%agens poss$veis para o postgres5l temos8 S&' "69' "'"GS&' @6' + "<@F-)D

A aspa no nome da ling%agem pode ser opcional( depende da verso do "ostgres5l1 no G.3 ela H4 # opcional2 A definio do corpo da f%no depende da ling%agem para plpgs5l ela deve obedece a seg%inte sinta7e8
Nota de Aula Prof. Sidney Vieira 2

.declare variavel1 tipo1( variavel2 tipo2( ... !6G*) *)S@9DIJ- 1 *)S@9DIJ- 2 96@D9) KA'-9 96@-9)6) ;/ 'A)GDAG6 L"'"GS&'L; O"s& 1- As aspas simples podem ser s%bstit%$das por MM 2 - "ara 5%e %ma f%no retorne mais de %m valor( mais de %ma linha de %ma tabela( o tipo de dado no retorno ret%rn tipo deve ser S6@-N nomeBtabela 3 - As vari4veis 5%e correspondem aos n-valores passados como parOmetros para a f%no devem ser nomeadas como M1( M2( M3( .. Mn E'e p$os&

1 - Funo sem parmetros de entrada primeiro8 criao da f%no +reate f%nction dois12 ret%rns integer as Eselect 2;/ lang%age s5l; seg%ndo8 %so da f%no Select dois12; 2 - funo com parmetros de entrada
Nota de Aula Prof. Sidney Vieira 3

primeiro8 criao da f%no create f%ncition media1decimal(decimal2 ret%rns decimal as MMselect 1M1PM22Q2;MM lang%age s5l; seg%ndo8 %so da f%no caso1 select media11R(G2; caso2 select media1G(S2; 3 - Funo que totaliza os tabela item!nota +96A@6 ND)+@*-) total)ota1*)@6G692 96@D9)S *)@6G69 AS L S6'6+@ SD,1preco2 N9-, itemB)ota TF696 n%m)ota = M1; L 'A)GDAG6 LS&'L; " # exemplo funo maior salrio de tabela funcionrio U.1 V criar a tabela create table f%nc1cAd integer( nome varchar13R2( sal4rio decimal11R(22( comisso decimal11R(222; U.2 inserir dados na tabela criada insert into f%nc val%es11( .W6/(1RRR(XRR2; insert into f%nc val%es12( .*K-/(1XRR(2RR2; insert into f%nc val%es13( .6KA/(1GRR(1RR2; U.3 crie %ma f%no maiorBsalario( para e7ibir o maior salario create f%ncition maiorBsal4rio12 ret%rns decimal as /select ,a71salario2 from f%nc; lang%age s5l; U.U %sar a f%no 5%e retorna o maior salario select maiorBsalario12; alores de itens de uma nota de enda da

Nota de Aula Prof. Sidney Vieira

$ - (u%)*o +ue co%cate%a te'tos


+reate f%nction soma1te7t( te7t2 ret%rns char as MM eclare res%ltado te7t; !egin res%ltado 8= M1 YY M2; ret%rn res%ltado; 6nd; MM lang%age Lplpgs5lL;

%sando a f%no8

select soma1LSidne: L(LSilvaL2;

% # Funo que retorna o nome dos clientes que fazem ani ersrio &o'e( data corrente) +96A@6 ND)+@*-) aniversariantes12 96@D9)S S6@-N clientes ASL S6'6+@ nome N9-, clientes TF696 aniversario = c%rrentBdate; 'A)GDAG6 LS&'L; *- Funo que disponibilize o maior alor de enda+

create f%nction maiorvenda12 ret%rns decimal as Lselect ,a71valor2 from venda;L lang%age s5l; %sando a f%no8 select maiorvenda12; ve%das

,# (u%)*o +ue dispo%i"i$i-e o va$or tota$ o"tido co create f%nction valortotal12 ret%rns decimal as Lselect s%m1valor2 from venda;L lang%age s5l; %sando a f%no8 select valortotal12;

,- -rie um .store procedure/ que disponibilize data da ultima enda create f%nction data%ltimavenda12 ret%rns date as Lselect ma71data2 from venda;L lang%age s5l;
Nota de Aula Prof. Sidney Vieira 5

%sando a f%no8

select data%ltimavenda12;

TR.GGER
Dma f%no de gatilho( trigger( o% delete. Si%ta'e& +reate trigger nomeBgatilho Zbefore o% after[ Zevento\or evento][ on table for each Zro? o% S@A@6,6)@ [ e7ec%te proced%re nomeBf%no 1v1(v2(...(vn2 Kari4veis dispon$veis no ambiente de programao - "' )6T @ipo de dado 96+-9 ; vari4vel contendo a nova linha do banco de dados( para as operaes de *)S69@QD" A@6 nos gatilhos no n$vel de linha. -' @ipo de dado 96+-9 ; vari4vel contendo a antiga linha do banco de dados( para as operaes de D" A@6Q 6'6@6 nos gatilhos no n$vel de linha. . @GB)A,6 @ipo de dado name; vari4vel contendo o nome do gatilho disparado. @GBTF6) @ipo de dado te7t; %ma cadeia de caracteres contendo !6N-96 o% AN@69( dependendo da definio do gatilho. @GB'6K6' @ipo de dado te7t; %ma cadeia de caracteres contendo 9-T o% S@A@6,6)@( dependendo da definio do gatilho. @GB-" @ipo de dado te7t; %ma cadeia de caracteres contendo *)S69@( D" A@6( o% 6'6@6( informando para 5%al operao o gatilho foi disparado. @GB96'* @ipo de dado oid; o * do gatilho. de obHeto da tabela 5%e ca%so% o disparo # %ma ao 5%e o SG! deve

desencadear antes o% depois de %m dos seg%intes comandos8 insert( %pdate

@GB96')A,6 @ipo de dado name; o nome da tabela 5%e ca%so% o disparo do gatilho. @GB)A9GS @ipo de dado integer; o n^mero de arg%mentos fornecidos ao procedimento de gatilho na instr%o +96A@6 @9*GG69.

Nota de Aula Prof. Sidney Vieira

@GBA9GK\] @ipo de dado matri0 de te7t; os arg%mentos da instr%o +96A@6 @9*GG69. - contador do $ndice comea por R. _ndices inv4lidos 1menor 5%e R o% maior o% ig%al a tgBnargs2 res%ltam em %m valor n%lo.

E'e

p$os& enda armazena

1 # 0atil&o que ao se efetuar uma insero na tabela

na tabela data o usuario1 o nome enda e a data com &ora+ +reate trigger a%ditoria after insert on venda for each Statement e7ec%te proced%re inseri%12; +reate f%nction inseri%12 ret%rns trigger as .insert into data val%es 1%ser(LvendasL(no?122;/ lang%age s5l; +reate table data1%s%ario varchar1XR2( tabela varchar1XR2( atahora

timestamp2;

2 - -rie um 2atil&o que a cada mudana no preo de produto armazene os dados na tabela &ist3rico+
+reate trigger at%ali0aBprecoBvenda after %pdate on prod%to for each ro? e7ec%te proced%re incl%irBhistorico12; +reate f%nction incl%irBhistorico 12 ret%rns trigger as .begin if 1old..valorBvenda`ane?.valorBvenda2 then insert into historico 1data( %ser( valorBanterior( valorBat%al2 val%es 1no?12(%ser(old.valorBvenda( ne?.valorBvenda2; ret%rn n%ll; end; lang%age plpgs5l; Nota de Aula Prof. Sidney Vieira

enda de um

Das könnte Ihnen auch gefallen