You are on page 1of 8

Laboratorio 06

ALUMNO luis yucra ccolqque

TEMA FUNCIONES Y PROCEDIMIENTOS ALMACENADOS

OBJETIVOS

Comprender la sintaxis de los procedimiento almacenados


Comprender la sintaxis de las funciones almacenadas
Decisiones y bucles

REQUERIMIENTOS

PC con Windows 2003 Server o XP, servidor Mysql instalado.


Herramientas graficas de administracin de Base de Datos.

INFORMACION ADICIONAL

Un procedimiento almacenado es un conjunto de comandos SQL que pueden


almacenarse en el servidor. Una vez que se hace, los clientes no necesitan
relanzar los comandos individuales pero pueden en su lugar referirse al
procedimiento almacenado.

Algunas situaciones en que los procedimientos almacenados pueden ser


particularmente tiles:

Cuando mltiples aplicaciones cliente se escriben en distintos lenguajes


o funcionan en distintas plataformas, pero necesitan realizar la misma
operacin en la base de datos.
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan
procedimientos almacenados para todas las oparaciones comunes. Esto
proporciona un entorno seguro y consistente, y los procedimientos
pueden asegurar que cada operacin se loguea apropiadamente. En tal
entorno, las aplicaciones y los usuarios no obtendran ningn acceso
directo a las tablas de la base de datos, slo pueden ejectuar algunos
procedimientos almacenados.

Los procedimientos almacenados pueden mejorar el rendimiento ya que se


necesita enviar menos informacin entre el servidor y el cliente. El intercambio
que hay es que aumenta la carga del servidor de la base de datos ya que la
mayora del trabajo se realiza en la parte del servidor y no en el cliente.
Considere esto si muchas mquinas cliente (como servidores Web) se sirven a
slo uno o pocos servidores de bases de datos.

Los procedimientos almacenados le permiten tener bibliotecas o funciones en


el servidor de base de datos. Esta caracterstica es compartida por los
lenguajes de programacin modernos que permiten este diseo interno, por
ejemplo, usando clases. Usando estas caractersticas del lenguaje de
programacin cliente es beneficioso para el programador incluso fuera del
entorno de la base de datos.

MySQL sigue la sintaxis SQL:2003 para procedimientos almacenados, que


tambin usa IBM DB2.

PROCEDIMIENTO
A: Procedimientos Almacenados

1.- Implementar un procedimiento almacenado p_mayor que permita calcular el mayor


de dos nmeros enteros

2.- Ejecute dicho procedimiento de la siguiente manera tal como lo muestra la figura

3.- Anote los detalles ms importantes en la tabla inferior


Para declarar un procedimiento almacenado se utiliza la notacin
Create definer=<user> procedure <nombre>(<args>)
La definicin se encuentra entre un BEGIN y un END
Se pueden declarar variables declare <nombre> <tipo>

4.- Calcular un procedimiento almacenado para calcular el mayor de tres nmeros

delimiter $$
drop procedure if exists `test`.`p_mayor3` $$

create definer = `root`@`localhost` procedure `test`.`p_mayor3`(a


int, b int, c int)

begin
declare rpta int;
set rpta = a;
if (b > rpta) then
set rpta = b;
end if;
if (c > rpta) then
set rpta = c;
end if;

select rpta;

end $$
delimiter ;

5.- Ejecutar el siguiente procedimiento almacenado p_numeros tal como en el ejercicio


anterior, en la tabla explicar su funcionamiento

Declara 2 variables, una de tipo varchar(rpta) y la otra int(a); en la cadena rpta


Se van cocatenando los valores de a; incrementado a en una unidad hasta
Alacanzar el valor de val.

6.- En Base a los dos procedimientos almacenados anteriores donde conocimos


sentencias condicionales y de control crear un procedimiento que permita crear una
serie de nmeros, en el cual se debe especificar el valor inicial, incremento y el nmero
de valores a incluir

delimiter $$
drop procedure if exists `test`.`p_serieNumeros` $$

create definer=`root`@`localhost`procedure `test`.`p_serieNumeros`(iniValue int, incr


int, nValues int)
begin

declare currentValue int default iniValue;


declare nValue int default 0;
declare rpta varchar(200) default '';

while (nValue <= nValues) do


set rpta = concat(rpta, currentValue, ' ');
set nValue = nValue + 1;
set currentValue = currentValue + incr;
end while;

select rpta;

end $$
delimiter ;

7.- Ahora ejecutaremos un procedimiento almacenado que tendr parmetros de entrada


y de salida tal como muestra la figura

8.- Anote los detalles ms importantes en la tabla inferior


Para que un procedimiento pueda tener valores de salida, estos se tiene que declarar al
Lado de la declaracin de las variables de entrada.
Las variables de salida pueden ser usadas dentro del procedimiento como cualquier otra
Variable.
9.- Para ejecutar dicho procedimiento lo tendremos que hacer dentro de una transaccin
y llamar al procedimiento con 6 parmetros los 3 primeros nmeros y los otros tres
variables con el smbolo de @ delante del nombre y luego hacer un select dichas
variables escriba la sentencia en la tabla

start transaction;
call `test`.`p_total`(10.0, 11.0, 12.0, @x, @y, @z);
select @x, @y, @z;
commit

10.- Segn el ejemplo anterior generar un procedimiento almacenado que acepte como
argumento de entrada una cadena de texto y un carcter y que devuelva en un
argumento de salida la cantidad de veces que la letra se encuentra en dicha cadena

delimiter $$
drop procedure if exists `test`.`p_countChars` $$

create definer=`root`@`localhost` procedure `test`.`p_countChars`(cadena


varchar(100),
caracter char(1),
out countC int)
begin

declare charIni int default 1;


declare cadenaLen int default length(cadena);
declare subCadena char(1) ;

set countC = 0;

while (charIni <= cadenaLen ) do


set subCadena = substring(cadena, charIni, 1);
if strcmp(caracter, subCadena) = 0 then
set countC = countC + 1;
end if;
set charIni = charIni + 1;
end while;
end$$
delimiter ;

start transaction;
call `test`.`p_countChars`('luuuuiiik', 'u', @c);
select @c;
commit;
B: Funciones Almacenadas

1.- Genere la funcin almacenada f_menor que se ve en la siguiente figura

2.- Ejecute la funcin y anote los detalles ms importantes en la tabla inferior


La funcin es muy similar a un procedimiento almacenado, para poder utilizar una
Funcin almacenada no es necesario utilizar la sentencia call

set @x = `test`.`f_menor`(15,16);

3.- Genere la funcin almacenada f_nombre_dia que se ve en la siguiente figura

4.- Ejecute la funcin y anote los detalles ms importantes en la tabla inferior

set @x = `test`.`f_nombreDia`(3);
miercoles
Utilizamos una clausula case similar al java o a la del c++

5.- Genere la funcin almacenada f_ENCRIPTAR que se ve en la siguiente figura


6.- Ejecute la funcin y anote los detalles ms importantes en la tabla inferior

set @x = `test`.`f_encriptar`('luik');
ljvm

7.- Genere la funcin almacenada f_DESENCRIPTAR que se ve en la siguiente figura

8.- Ejecute la funcin y anote los detalles ms importantes en la tabla inferior

set @x = `test`.`f_desencriptar`('ljvm');
luik

9.- Mencione 10 conclusiones de lo aprendido

1 Se puede utilizar procesos almacenados para disminuir la informacin en un cliente y


el servidor.
2 Lo procedimientos para poder ser ejecutados necesitan la clausula CALL
3 Lo procedimientos almacenados pueden tener parametros de entrada y parametros de
salida (out)
4 Los parametros de salida se reconocen por @ que esta adelante de su nombre
5 Las funciones devuelven un solo tipo de valor
6 Las funciones no necesitan un CALL para ser ejecutados
7 Existen estructuras procedimentales dentro de los procedimientos y funciones
8 if(cond) then <expr+> end if;
9 while(cond) do <expr+> end while;

You might also like