You are on page 1of 8

ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS

Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
Unidade didctica 3. Automatizacin de tarefas: construcin
de secuencias de comandos de administracin.
Para optimizar o seu traballo o administrador de bases de datos debe ontar on !erramentas para automatizar
as s"as tare!as dada a #rande e di$ersa antidade de traballos %ue debe realizar&
Automatizar ' a la$e dun(a boa administrai)n& Sen esa posibilidade o administrador %uedar*a limitado
enormemente no seu traballo&
+o,e en d*a ase t)dolos sistemas ,estores- omeriais e libres- ontan on !erramentas para a
automatizai)n %ue na maior*a dos asos onsisten no uso de rutinas .proedementos e !uni)ns/
almaenados- disparadores ou tri##ers e e$entos- ademais da posibilidade de usar APIs de distintas lin#ua,es
de pro#ramai)n omo perl- p(p ou p0t(on&
A ontinuai)n $eremos as !erramentas b1sias e,istentes en ase t)dolos SXBD omeriais e libres&
3.1. Procedementos e funcins almacenados
As rutinas .proedementos e !uni)ns/ almaenadas son un on,unto de omandos S23 %ue se almaenan
no ser$idor& 4n(a $ez %ue se !ai- os lientes non neesitan lanzar ada omando indi$idual sen)n %ue poden
no seu lu#ar (amar ) proedemento almaenado omo un "nio omando&
Vantaxes:
Rendemento& O SXBD- neste aso o %ue $amos traballar ' M0S23- ' apaz de traballar m1is
r1pido os datos %ue al%uera lin#ua,e do lado do ser$idor- e le$ar1 a abo as tare!as on m1is
e!iienia& S) realizamos un(a one,i)n ) ser$idor- onse#uindo as* un aumento do rendemento
da rede onsiderable- ademais nees*tase en$iar menos in!ormai)n entre o ser$idor e o liente&
Reutilizacin& O proedemento almaenado poder1 ser in$oado desde al%uera parte do
pro#rama&
Portabilidade& Ao ir inte#rados na base de datos permiten a portabilidade a outros sistemas sen
neesidade de adaptai)ns& Isto ' "til ando m"ltiples apliai)ns liente se esreben en distintas
lin#ua,es ou !unionan en distintas plata!ormas- pero neesitan realizar a mesma operai)n na
base de datos&
Seguridade& Cando (amamos a un proedemento almaenado- este deber1 realizar t)dalas
omprobai)ns pertinentes de se#uridade e seleionar1 a in!ormai)n o m1is preisamente
posible- para en$iar de $olta a in!ormai)n ,usta e neesaria e %ue pola rede irule o m*nimo de
in!ormai)n& Os banos- por e,emplo- usan proedementos almaenados para t)dalas operai)ns
om"ns& En tal ontorno- as apliai)ns e os usuarios non obter*an nin#"n aeso direto 1s
t1boas da base de datos- s) poden e,eutar al#"ns proedementos almaenados&
4n(a rutina ' un proedemento ou un(a !uni)n&
4n procedemento in$)ase usando un omando CA33 e s) pode de$ol$er $alores usando $ariables de
sa*da&
4n(a funcin pode (amarse desde dentro dun omando omo al%uera outra !uni)n .isto '- in$oando o
nome da !uni)n/- e pode retornar un $alor esalar&
1
ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS
Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
3.1.1. Sintaxe e exemplos de rutinas almacenadas
Abrimos un(a onsola de M0S23- seleionamos una base de datos e empezamos a esribir5
6amos a crear das tboas, nun(a almaenaremos as persoas maiores de 78 anos e na outra as
persoas menores&
CREATE TABLE nenos(idade int, nome varchar(50));
CREATE TABLE adultos(idade int, nome varchar(50));
Ima,ina %ue a#ora %ueremos introduir persoas nas t1boas pero dependendo da idade %ueremos %ue
se introduzan nun(a t1boa ou noutra& Si estamos usando P+P poder*amos omprobar mediante
)di#o si a persoa ' maior de idade& 9ar*amolo as*5
$nome = $_POST[nome!;
$idade = $_POST[idade!;

i"($idade #lt; $%)&
m's(l_(uer'(insert into nenos values( ) $idade ) , *)$nome)+));
,else&
m's(l_(uer'(insert into adultos values( ) $idade ) , *)$nome)+));
,
Si a onsulta ' orta omo neste aso- esta !orma ' inluso m1is r1pida %ue ter %ue rear un
proedemento almaenado- pero si tes %ue !aer isto moitas $ees ao lon#o da t"a apliai)n- '
mellor !aer o se#uinte5
Creamos o proedemento almaenado5
delimiter --
CREATE .rocedure introducePersoa(IN idade int,IN nome varchar(50))
/0123
IF idade #lt; $% then
INSERT INTO nenos VALUES(idade,nome);
04S0
INSERT INTO adultos VALUES(idade,nome);
035 IF;
035;
--
delimiter ;
Xa temos o noso proedemento - $amos a por un(a $isi)n m1is detallada:
A primeira li;a ' para diirlle a M0S23 %ue a partir de a#ora ata %ue non introduzamos << non aaba
a sentenza- isto o !aemos as* por%ue no noso proedemento almaenado teremos %ue introduir o
ar1ter =>? para as sentenzas- e si prememos enter M0S23 pensar1 %ue ,a aabou a onsulta e
dar1 erro&
Con reate proedure empezamos a de!inii)n de proedemento on nome introduePersoa& Nun
proedemento almaenado e,isten par1metros de entrada e de sa*da- os de entrada .preedidos de =in?/ son
os %ue lle pasamos para usar dentro do proedemento e os de sa*da .preedidos de =out?/ son $ariables %ue
se estableer1n ao lon#o do proedemento e una $ez este !inalie poderemos usar- ,a %ue %uedar1n na sesi)n
de M0S23&
Neste proedemento simple so $amos usar $ariables de entrada- m1is adiante $eremos omo usar par1metros
2
ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS
Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
de sa*da&
Para facer unha chamada ao noso procedemento almaenado usaremos a sentenza all5
call introducePersoa(65,+7ose8anuel+);
4n(a $ez temos ,a o noso proedemento simplemente o e,eutaremos desde P+P mediante un(a (amada
omo esta5
$nome = $_POST[9nome9!;
$idade = $_POST[9idade9!;

m's(l_(uer'(call introducePersoa( ) $idade ) ,* )$nome) +););
De a#ora en diante- usaremos sempre o proedemento para introduir persoas na nosa BD de ,eito %ue si
temos @A sritps P+P %ue o usan e un bo d*a deidimos %ue a !orma de introduir persoas non ' a orreta- so
teremos %ue modi!iar o proedemento introduePersoa e non os @A sripts&
3
ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS
Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
A sinta,e ,eral para a reai)n dun proedemento ou !uni)n '5
CREATE PROCED4RE e CREATE 94NCTION re%uiren o permiso CREATE RO4TINE
spBname5 ' o nome da rutina almaenada&
parameter5 son os par1metros %ue en ,eral se araterizan por un tipo e un nome& O tipo pode ser
de entrada .IN/- sa*da .O4T/ ou entrada<sa*da .INO4T/&
routineBbod05 ' o orpo da rutina !ormado ,eralmente por sentenzas S23& En aso de (aber
m1is dun(a deben ir dentro dun blo%ue delimitado por sentenzas BECIN e END&
Deterministi5 india se ' determinista ou non- ' diir se sempre produe o mesmo resultado&
Contains S23<no S235 espei!ia se ont'n sentenzas S23 ou non&
Modi!ies S23 data<Reads S23 data5 india se as sentenzas modi!ian ou non os datos&
S23 seurit05 determina se debe e,eutarse on permisos do reador .de!iner/ ou do %ue o
in$oa .in$oDer/&
Os or(etes indian par1metros opionais- as palabras en mai"sulas son reser$adas da lin#ua,e S23 e o
resto son opi)ns %ue se e,plian detalladamente no manual de re!erenia&
T)dolos proedementos ou !uni)ns r'anse asoiados a un(a base de datos %ue ser1 a ati$a nese
momento ou a %ue po;amos omo pre!i,o no nome do mesmo&
Podemos esribir un proedemento usando un editor de te,tos& Po;'moslle a e,tensi)n &s%l no nome de
!i(eiro&
4
ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS
Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
Creamos o proedemento na base de datos e,eutando o !i(eiro de e,tensi)n &s%l desde a inter!ae de
omandos de M0S235
m0s%lE soure nomeB!i(eiro&s%l .non es%ueer seleionar antes a BD- ou inlu*r no !i(eiro &s%l a
selei)n da BD/
Non es%ueer $ol$er a po;er o delimitador de ordes a > o omando delimiter- sen)n o delimitador
ses#uir1 sendo o indiado ao rear o proedemento&
Para executalo5
m0s%lE all nomeBproedemento./>
Para comprobar %ue o proedemento e,iste na base de datos usaremos o omando
m0s%lE s(oF reate proedure nomeBproedemento>
M1is e,emplos5
6eremos as !uni)ns m1is detalladamente no apartado G&7&H&
5
ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS
Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
3.1.2. Variables
:;0<T0 P;O:05=;0 . ()
/0123
50:4<;0 i 23T 50><=4T 0;
50:4<;0 d 50:28<4($0,?) 50><=4T 0;
50:4<;0 " >4O<T 50><=4T 0;
@A240 i B $0000 5O
S0T d = d C )000$;
S0T " = " C )000$00;
S0T i = i C $;
035 @A240;
S040:T d, ";
035;
50:4<;0 var_name[,)))! t'.e [50><=4T value!
Este omando "sase para delarar $ariables loais& Para proporionar un $alor por de!eto para a $ariable-
inl"a un(a l1usula DE9A43T& O $alor pode espei!iarse omo e,presi)n- non neesita ser un(a
onstante& Se a l1usula DE9A43T non est1 presente- o $alor iniial ' N433&
A $isibilidade dun(a $ariable loal ' dentro do blo%ue BECIN&&&END onde est1 delarado&
S0T var_name = eD.r [, var_name = eD.r! )))
SET permite asi#nar $alores 1s $ariables usando o operador de i#ualdade&
3.1.3. Parmetros
E,isten tres tipos5
!5 I o tipo por de!eto e ser$e para inlu*r par1metros de entrada %ue usar1 o proedemento&
"#$5 Par1metros de sa*da& O proedemento pode asi#nar $alores a estes par1metros %ue son de$oltos na
(amada&
!"#$5 Permite pasar $alores ) proedemento%ue ser1n modi!iados e de$oltos na (amada&
delimiter <<
use test<<
drop proedure i! e,ists suma<<
reate proedure suma@.in sum7 int- in sum@ int- out resultado int/
be#in
<J Realizamos o alulo J<
set resultado K sum7 L sum@>
end<<
delimiter >
m0s%lE all suma@.7H-8-Mres/>
m0s%lE selet Mres>
6
ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS
Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
3.1.4. Control de fluxo en procedementos almacenados
% $&'! '(S'
delimiter --
CREATE .rocedure miProc(IN .$ int) /* Parmetro de entrada */
EeFin
declare miGar int; /* declrase variable local */
SET miGar = .$ C$ ; /* establcese a variable */
IF miGar = $6 then
INSERT INTO lista VALUES(55555);
else
INSERT INTO lista VALUES(HII5);
end IF;
end;
--
C)S'
delimiter --
CREATE .rocedure miProc (IN .$ int)
EeFin
declare var int ;
SET var = .$ C6 ;
case var
Jhen 6 then INSERT INTO lista VALUES (IIIII);
Jhen K then INSERT INTO lista VALUES (?5?5II5);
else INSERT INTO lista VALUES (HHHHHHHH);
end case;
end;
--
C"*P)R)C+! ,' C),')S
delimiter --
CREATE .rocedure com.ara(IN cadena varchar(65), IN cadena6 varchar(65))
EeFin
IF strcm.(cadena, cadena6) = 0 then
SELECT Lson iFualesML;
else
SELECT Lson di"erentesMML;
end IF;
end;
--
A !uni)n strmp de$ol$e A si as adeas son i#uais- si non de$ol$e A ' %ue son di!erentes&
Para m1is !uni)ns de adeas $er o apartado 7@&G& do manual de re!erenia&
7
ADMINISTRACIN DE SISTEMAS XESTORES DE BASES DE DATOS
Unidade Didctica 3. Automatizacin de tarefas: construcin de secuencias de comandos de administracin. Procedementos e funcins almacenados
#S" ,' -&('
delimiter --
CREATE .rocedure .$?()
EeFin
declare v int;
SET v = 0;
Jhile v B 5 do
INSERT INTO lista VALUES (v);
SET v = v C$ ;
end Jhile;
end;
--
#S" ,'( R'P')$
delimiter --
CREATE .rocedure .$5()
EeFin
declare v int;
SET v = 60;
re.eat
INSERT INTO lista VALUES(v);
SET v = v N $;
until v B= $
end re.eat;
end;
--
(""P ().'(
delimiter --
CREATE .rocedure .$I()
EeFin
declare v int;
SET v = 0;
loo._laEel O loo.
INSERT INTO lista VALUES (v);
SET v = v C $;
IF v P= 5 then
leave loo._laEel;
end IF;
end loo.;
end;
--
Este ' outro tipo de loop- a $erdade ' %ue tendo os anteriores non se me oorre apliai)n para usar este tipo
de loop- pero ' bo saber %ue e,iste por si al#"n d*a te enontras al#"n proedemento moi anti#o %ue o use& O
)di#o %ue (a,a entre loopBlabel 5 loop e end loop> eNeutarase ata %ue se enontre a sentenza lea$e
loopBlabel> %ue pu,emos na ondii)n- polo tanto o loop repetirase ata %ue a $ariable $ se,a EK %ue H&
O loop pode tomar al%uera nome- ' diir- pode (amarse meu3oop5 loop- en u,o aso repetirase ata %ue se
e,eute a sentenza lea$e meu3oop&

You might also like