Professional Documents
Culture Documents
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
;8
;8
;8
8;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP7;8
;8
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8
;8
8;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP7;8
;8
;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)#
%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..,
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.