You are on page 1of 7

Passo 1 (Aluno) Fazer uma pesquisa no livro texto ou nos livros complementares da disciplina sobre os fundamentos para criao

e utilizao de Triggers e Procedures. Em seguida, elaborar um tutorial mostrando os procedimentos para programar procedures e triggers. O tutorial deve conter pelo menos cinco pginas.

Conceito de Stored. Stored rocedures so semel!antes a subrotinas ou subprogramas desenvolvidos noutras linguagens de programao "p.e. #, ascal, $asic, %ava, etc.&, mas que so guardados no servidor. 'ceitam par(metros de entrada e retornam resultados. )sto *, como qualquer subprograma, um procedimento permite a passagem de par(metros de entrada e de sa+da, aceitando valores e devolvendo algum tipo de resultado , entidade que o invocou, que pode ser um outro procedimento, um gatil!o ou mesmo uma aplicao externa cliente. -etornam um valor de status indicando se aconteceu um erro, e qual foi. So basicamente blocos de instru.es S/0 compiladas num 1nico plano de execuo. Propsitos/Vantagens. 2iminuio do trfego na rede. ' execuo destes programas no seio de um servidor permite reduzir substancialmente o trfego de rede provocado por aplica.es que solicitem ao servidor a execuo de instru.es S/0. O servidor passa a ser assim no s3 servidor de dados, mas tamb*m servidor de programas para a manipulao dos dados. rogramao por m3dulos. 4m stored procedure ap3s ser guardado na $2, pode ser invocado vrias vezes num programa. ode tamb*m ser alterado sem que !a5a necessidade de alterar em todos os lados. Execuo mais rpida. Se uma operao tem muitas instru.es 67S/0 e8ou * executada muitas vezes, os stored procedures conseguem ser mais rpidos, pois so compilados e optimizados no momento da sua criao. Segurana. ode ser dada permisso aos utilizadores para executar um stored procedure, mesmo que no ten!am permisso para utilizar o mesmo c3digo directamente atrav*s de um editor. Exemplos. Exemplo 9: #-E'6E -O# #li

'S SE0E#6 ; F-O< #0)E=6E E>E# cli Exemplo ?: '06E- -O# #li @#od#li int 'S SE0E#6 ; F-O< #0)E=6ES ABE-E #liente)2 C @#od#li E>E# #li 9

Trigger 4m trigger permite que uma determinada sequDncia de comandos S/0 se5a acionada quando um determinado evento ocorre. O evento pode ser )=SE-6, 4 2'6E, ou 2E0E6E. O trigger pode ser acionado imediatamente antes "$EFO-E& ou imediatamente depois "'F6E-& de cada evento. O procedimento pode ser programado numa linguagem qualquer desde que devidamente instalada no servidor do SE$2.

Tutorial procedures
Em uma stored procedure * permitido que se5a passados par(metro de entrada, com o ob5etivo de atender uma condio necessria em uma instruo 67S/0. Sintaxe de cria o de uma Stored Procedure!
Verificar se a procedure j existe, se sim, DROPA e CRIA ela novamente If exists "select 1 from sFs.procedures G!ere name C HspSelect'lunosI& Drop rocedure Student.spSelect'lunos o !oda procedure deve ser criada com seu "c#ema$ %o exemplo a&aixo utili'amos o sc#ema "tudent create procedure Student.spSelect'lunos ( @# F c!ar"11& ) As

*e+in select ; from dbo.'lunos G!ere 'lunos.# F C @# F ,nd Controle de "e+uran-a RA%! '00 O= Student.pSelect'lunos 6O 4$0)#

Considera"es procedure!

da

sintaxe

de

cria o

de

uma

stored

a& 2eve7se verificar se a procedure 5 existe no banco de dados, dropa ela e cria novamente. <as por que no utilizar '06E-O#E24-EJ 6amb*m pode ser utilizado, o exemplo deste artigo * um padro que adotei para poder atualizar a documentao interna da procedure "citarei abaixo&K b& 6oda procedure deve possuir seu sc!ema para que no !a5a problemas8conflitos de execuo, pois pode7se possuir procedures com o mesmo nome em sc!emas diferentesK c& assar os devidos par(metros de entrada da stored procedure. =o * obrigat3rio, depender da necessidade de cada desenvolvedor 67S/0. #odelo de $ocumenta o de uma Stored Procedure ara facilitar uma futura manuteno em uma Stored rocedure, * interessante document7la desde a sua criao , todas as altera.es realizadas. 'baixo segue um simples modelo:

8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8

8; 6640O : Student.pSelect'lunos

;8

8; 2EF)=)O : #O=S406' 2E '04=OS O- # F

;8

8; 2'6' 2E #-)'O : L?8LM8?L9L

;8

8; '='0)S6' : E'$-)E0 $ 'N EOE2O

;8

8; E< -ES' : $'--OSO #O=S406O-)' E< 6)

;8

8;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP7;8

8; $'=#O 2E 2'2OS: <icrosoft<sdn6ec!net

;8

8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8

8; '06E-'#OES -E'0)N '2'S =' -O#E24-E

;8

8;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP7;8

8; 2'6' Q =O<E Q E< -ES' Q 2ES#-)#'O

;8

8; L?8LM8?L9L Q Eabriel 'zevedo Q $arroso #onsultoria em 6) Q #riao

;8

8;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP7;8

8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8

ara completar o modelo acima, pode7se colocar o ambiente onde se encontra o $anco de 2ados, as tabelas envolvidas, considera.es, etc. Controle de Segurana da Stored Procedure 2entro da pr3pria stored de acesso dos usurios. grande, no irei detal!ar sintaxe, onde * liberado o procedure pode7se configurar a permisso #omo permisso de acesso * um tema muito, mas abaixo segue um exemplo de acesso F400 de usurios do grupo 4$0)#:
4$0)#

RA%! '00 O= Student.pSelect'lunos 6O

%uais s o os &en'(cios e o )an*o de $esempen*o de uma Stored Procedure+ R So registradas no servidor R odem possuir atributos de segurana "com permiss.es& e encadeamento de propriedade R O usurio pode ter permisso de executar a stored procedure sem ter permisso em ob5etos internos da S

R 'umenta a segurana da aplicao R ermitem programao modular R ' stored procedure pode ser criada uma 1nica vez e ser c!amada quantas vezes !ouver necessidade. )sso facilita na manuteno de sua aplicao R odem reduzir o trfego de rede R or serem pr* compiladas o tempo de execuo * muito mais gil do que vocD inserir as instru.es diretas dentro de uma aplicao

Tutorial Triggers

O que so 6riggersJ

6rigger ou HEatil!oI * um recurso dos SE$2Is executado sempre que algum evento associado a ele ocorrer, em outras palavras, triggers so instru.es S/0 que so acionadas automaticamente quando !ouver altera.es ")=SE-6, 2E0E6E, -E 0'#E e 4 2'6E & na tabela em que o gatil!o estiver associado. ara o <FS/0 os triggers esto dispon+veis a partir da verso M.L.? ou superior. #omo so utilizadosJ So usados para realizar tarefas relacionadas com valida.es , restri.es de acesso , rotinas de segurana, consistDncia de dados, auditorias e etc.. Os gatil!os so acionados antes "$EFO-E& ou depois "'F6E-& de fazer uma alterao de registros de uma determinada tabela "O= 6'$0E

nomeSdaStabela&. 'l*m das palavras c!aves $EFO-E e 'F6E- existem os operados =EA e O02 que possibilitam o acesso da informao inserida no campo de um registro. 'ntes de partimos para os exemplos * necessrio esclarecer algumas situa.es, ve5amos: )=SE-6: Essa instruo aceita somente o operador =EA.nomeScoluna, onde * poss+vel acessar o valor enviado para ser inserido em uma coluna de uma tabela. 2E0E6E: Essa instruo aceita somente o operador O02.nomeScoluna, onde * possivel recuperar o valor excluido ou que ser excluido pela instruo. 4 2'6E: Essa instruo aceita os dois operadores sendo, O02.nomeScoluna utilizado para recuperar o valor do campo antes da instruo e o =EA.nomeScoluna usado para recuperar o novo valor ap3s a execuo da instruo 'plicabilidade com exemplos prticosT ' sintaxe para criao dos triggers * bastante simples, ve5am:
D,.I/I!,R 00 CR,A!, !RI ,R nome1+atil#o tempo1+atil#o(*,2OR,,A2!,R) evento1+atil#o(I%",R!,D,.,!,,3PDA!,) O% nome1da1ta&ela 2OR ,AC4 RO5 *, I% Instru-6es "7.8s ,%D9 00 D,.I/I!,R 9

' sintaxe detal!ada para criao dos triggers poder ser consultada na documentao do <FS/0.

O ponto e virgula UKV por default * usado para finalizar as instru.es8comandos no mFsql. <as os triggers utilizam o ponto e virgula como parte de sua instruo, por tanto, ao se trabal!ar com trigger e necessrio mudar o delimitador do <FS/0 temporariamente. )maginemos a seguinte situao, temos uma tabela simples de produto com os campos )2, =O<E, -E#O.
:: :: ,strutura da ta&ela ;produtos; :: CR,A!, !A*., I2 %O! ,<I"!" ;produtos; ( ;ID; int(11) %O! %3.. A3!O1I%CR,/,%!, ;%O/,; varc#ar(=>>) %O! %3.., ;VA.OR; decimal(1>,=) %O! %3..,

PRI/AR? @,? (;ID;) ) ,% I%,A/BI"A/ D,2A3.! C4AR",!AutfC A3!O1I%CR,/,%!A1 9

O preo desses produtos sofrero rea5ustes ao longo do tempo e devero ser mantidos !ist3ricos para a possibilidade da emisso de relat3rios futuros. ara isso teremos a tabela, produtosS!istoricos:
:: :: ,strutura da ta&ela ;produtos1#istorico; :: CR,A!, !A*., I2 %O! ,<I"!" ;produtos1#istorico; ( ;ID; int(11) %O! %3.., ;DA!A14ORA; datetime %O! %3.., ;VA.OR; decimal(1>,=) %O! %3.., PRI/AR? @,? (;ID;,;DA!A14ORA;) ) ,% I%,A/BI"A/ D,2A3.! C4AR",!AutfC9

<as e agora, como fao para que ap3s toda atualizao na tabela de produtos se5a salvo o valor antigo daquele produtoJ Facil, usamos 6riggerT
D,.I/I!,R DD CR,A!, !RI ,R salvaValorProduto A2!,R 3PDA!, O% produtos 2OR ,AC4 RO5 *, I% I%",R! I%!O produtos1#istorico ",! ID A O.D$ID, DA!A14ORA A %O5(), VA.OR A O.D$VA.OR9 ,%D9 DD D,.I/I!,R 9

/uando o valor de qualquer produto for atualizado, automaticamente o banco de dados ir executar um )=SE-6 na tabela de !ist3rico armazenando o )2 do produto a 2'6' e BO-' em que o produto foi atualizado e * claro, o O'0O- do produto antes do rea5uste. 2essa forma poderemos consultar a variao daquele produto ao longo do tempo. ercebam nesse trigger que foi utilizado o 'F6E- ou se5a, o gatil!o ser disparado 2E O)S que o comando 4 2'6E for executado na tabela HprodutosI, ve5am tamb*m que foi utilizado o operado O02.O'0O- para recuperarmos o valor do produto antes da alterao de rea5uste. Sendo assim, encerro por aqui min!as explica.es em rela.es a esse fantstico recurso que o <FS/0 nos disponibiliza, que so os 6riggers.

You might also like