Está en la página 1de 10

UNASAM Ingeniería de Sistemas e Informática

SESIÓN5
PROCEDIMIENTOS ALMACENADOS Y FUNCIONES DE
USUARIO, CON O SIN PARÁMETROS: DE
ENTRADA/SALIDA EN MYSQL, USO DE CURSORES
1. Procedimientos almacenados
a. Definición
Conjunto de instrucciones que le damos a un computador o un servidor de base de
datos, para realizar tareas o acciones específicas en la solución de determinados
problemas, interactúa directamente con otros componentes de una base de datos,
como por ejemplo con las tablas. Sus instrucciones en Mysql siempre finalizan
con (;) e incluso el final de las estructuras de control finalizan con (;). Permiten
ahorrar tiempo en el procesamiento de datos y quedan almacenados formando
parte de la base de datos.
En la implementación utilizan las estructuras o flujos de control del DBMS (pe.
en Mysql if condición then instrucciones; else instrucciones; endif;). Pueden tener o
no parámetros o argumentos, pero es conveniente que los tenga porque así se
hacen más generales y sobre todo reutilizables. Sus parámetros pueden ser de
entrada o de salida.
Ayudan a reducir líneas de código desde un lenguaje de programación (pe. Java),
favorece la velocidad de procesamiento en las aplicaciones software y son fáciles
de utilizar desde cualquier lenguaje de programación (pe. Java).
Finalmente permiten la programación en la capa de datos de una aplicación o
programa y cuando se graba una copia de ellos se genera un archivo de texto con
la extensión .sql.
El autor.
b. Sintaxis para crear un procedimiento almacenado
Su sintaxis general es la siguiente.
Delimiter//
Create procedure nombreprocedimiento (in | out [parámetros tipo de dato])
Begin
Instrucciones;
End//
Delimiter;
Fuente: Elaboración propia

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Dentro del bloque de instrucciones se utilizan elementos como variables y flujos de


control.
c. Variables
Son objetos que reservan un espacio de memoria del ordenador, sirve para
almacenar los datos que se procesan en el procedimiento o función, el valor que
tienen asignado puede cambiar en cualquier momento durante la ejecución. Para
trabajar con variables debemos crearlas o declararlas, asignarle un valor y
recuperar su valor.
• Crear una variable
Para crear una variable se usa la palabra reservada declare y la instrucción
completa es la siguiente
declare nombrevariable tipodedato;
• Asignar un valor a una variable
Podemos asignar un valor al momento de declarar la variable.
declare nombrevariable tipodedato default valor inicial;

También podemos asignar un valor a una variable en cualquier parte del


código y dependiendo de la necesidad de la siguiente forma.
Set nombrevariable=valor;
d. Flujos de control
Son instrucciones escritas en un lenguaje como sql para Mysql, mediante los
cuales se puede organizar las instrucciones o código de un procedimiento o una
función de manera eficiente. Son de tipo selectivas y repetitivas.
Selectivas
Simple
If condición then
Instrucciones;
Else
Instrucciones;
End if;
Múltiple
Case Expresion o variable
When valor 1 then
Instrucciones;
When valor 2 then
Instrucciones;
.
.
.
When valor n then

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Instrucciones;
Else
Instrucciones;
End Case;

Interactivas o Repetitivas
While condición do
Instrucciones;
End While;

Repeat
Instrucciones;
Until condición
End Repeat;

Loop_label : loop
instrucciones
if condicion then
leave loop_label;
end if;
End Loop;
Para llamar o ejecutar un procedimiento almacenado, se utiliza el comando call de la
siguiente forma:
call nombredelprocedimiento (valores de los parámetros);
1. Ejemplos
Implemente un procedimiento almacenado que le permita calcular cuántos números
pares existe en un rango formado por dos números donde el segundo es mayor que el
primero en al menos 100.

Ahora se le pide a usted que ademas de la cantidad, muestre cuáles son esos números,
separados por comas (200, 202, 204,……., 298,300).

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

DELIMITER//
CREATE PROCEDURE NUMEROS_PRIMOS (NUM1 INT, NUM2 INT)
BEGIN
DECLARE N INT; DECLARE D INT;
DECLARE CD INT; DECLARE CTPR INT DEFAULT 0;
IF (NUM2-NUM1)<=20 THEN
SET N=NUM1;
WHILE N<=NUM2 DO
SET D=1; SET CD=0;
WHILE D<=N DO
IF MOD(N,D)=0 THEN
SET CD=CD+1;
END IF;
SET D=D+1;
END WHILE;
IF CD=2 THEN
SET CTPR=CTPR+1;
END IF;
SET N=N+1;
END WHILE;

CASE CTPR
WHEN 0 THEN
SELECT CONCAT(CTPR,'-->','CERO');
WHEN 1 THEN
SELECT CONCAT(CTPR,'-->','UNO');
WHEN 2 THEN
SELECT CONCAT(CTPR,'-->','DOS');
WHEN 3 THEN
SELECT CONCAT(CTPR,'-->','TRES');
WHEN 4 THEN
SELECT CONCAT(CTPR,'-->','CUATRO');
WHEN 5 THEN
SELECT CONCAT(CTPR,'-->','CINCO');
WHEN 6 THEN
SELECT CONCAT(CTPR,'-->','SEIS');
WHEN 7 THEN
SELECT CONCAT(CTPR,'-->','SIETE');
WHEN 8 THEN
SELECT CONCAT(CTPR,'-->','OCHO');
WHEN 9 THEN
SELECT CONCAT(CTPR,'-->','NUEVE');
WHEN 10 THEN
SELECT CONCAT(CTPR,'-->','DIEZ');
END CASE;
ELSE
SELECT 'NO CUMPLE LA CONDICION';
END IF;
END//
DELIMITER;

DELIMITER//
CREATE PROCEDURE NUMEROS_PRIMOSREPEAT (NUM1 INT, NUM2 INT)
BEGIN
DECLARE N INT; DECLARE D INT; DECLARE CD INT;
DECLARE CTPR INT DEFAULT 0;
DECLARE RESU VARCHAR (120) DEFAULT '';
IF (NUM2-NUM1) <=20 THEN
SET N=NUM1;
WHILE N<=NUM2 DO

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

REPEAT
SET D=1; SET CD=0;
REPEAT
IF MOD (N, D) =0 THEN
SET CD=CD+1;
END IF;
SET D=D+1;
UNTIL D=N;
END REPEAT;
IF CD=2 THEN
SET CTPR=CTPR+1;
END IF;
SET N=N+1;
UNTIL N=NUM2
END REPEAT;
-- END WHILE;
CASE CTPR
WHEN 0 THEN
SET RESU=CONCAT(CTPR,'-->','CERO');
WHEN 1 THEN
SET RESU= CONCAT(CTPR,'-->','UNO');
WHEN 2 THEN
SET RESU= CONCAT(CTPR,'-->','DOS');
WHEN 3 THEN
SET RESU= CONCAT(CTPR,'-->','TRES');
WHEN 4 THEN
SET RESU= CONCAT(CTPR,'-->','CUATRO');
WHEN 5 THEN
SET RESU= CONCAT(CTPR,'-->','CINCO');
WHEN 6 THEN
SET RESU= CONCAT(CTPR,'-->','SEIS');
WHEN 7 THEN
SET RESU= CONCAT(CTPR,'-->','SIETE');
WHEN 8 THEN
SET RESU= CONCAT(CTPR,'-->','OCHO');
WHEN 9 THEN
SET RESU= CONCAT(CTPR,'-->','NUEVE');
WHEN 10 THEN
SET RESU= CONCAT(CTPR,'-->','DIEZ');
END CASE;
SELECT RESU RESULTADO;
ELSE
SELECT 'NO CUMPLE LA CONDICION';
END IF;
END//
DELIMITER;
Procedimientos almacenados sin base de datos
Por ejemplo, se puede implementar procedimientos almacenados que nos permitan dar
mantenimiento a una tabla de una base de datos; es decir crear, modificar o editar y
eliminar los datos de los registros de las tablas o cualquier otra operación sobre los datos
de una BD, a continuación, se tiene un procedimiento almacenado para crear, modificar
y eliminar los registros de la tabla usuario de una BD.

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

drop procedure GeneraComprobante;


delimiter//
create procedure GeneraComprobante(tcom varchar(12),ser varchar(8),num int)
begin
declare res varchar(25) default '';
declare lnt int default 0;
if strcmp(tcom,'Boleta')<>0 and strcmp(tcom,'Factura')<>0 and
strcmp(tcom,'Guia de remision')<>0 then
select 'El tipo de comprobate es incorrecto';
else
set num=num+1;set lnt=length(num);
case lnt
when 1 then
set res=concat(tcom,' ',ser,'_','000000',num);
when 2 then
set res=concat(tcom,' ',ser,'_','00000',num);
when 3 then
set res=concat(tcom,' ',ser,'_','0000',num);
when 4 then
set res=concat(tcom,' ',ser,'_','000',num);
when 5 then
set res=concat(tcom,' ',ser,'_','00',num);
when 6 then
set res=concat(tcom,' ',ser,'_','0',num);
end case;
select res;
end if;
end//
delimiter;

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Procedimiento almacenado con parámetros de entrada


Como ya se dijo en sesiones anteriores los procedimientos almacenados pueden tener
parámetros de diferentes tipos de datos, pero a us vez estos pueden ser de entrada/salida;
en Mysql para vindicar que se está utilizado parámetros de entrada al parámetro se le
antepone la palabra reservada out, tal como se muestra a continuación.
a. Crear el procedimiento almacenado
A continuación, creamos el procedimiento almacenado que permite obtener la
cantidad de editoriales, que tienen un identificador mayor a 3.
delimiter//
create procedure DevoDarpProc(out devl text)
begin
set devl=concat_ws(' ',(select count(*) from editorial where ideditorial>3));
end//
delimiter;

b. Ejecutar o llamar a un procedimiento almacenado.


Después de crear el procedimiento almacenado se procede a su ejecución o uso, tal
como se muestra en las siguientes líneas de código.
call DevoDarpProc(@resul);
select @resul Resultado;

Como se observa en las líneas de código anterior se llama al procedimiento


almacenado con la palabra reservada call, pero se tiene que enviar una variable libre
para el parámetro de salida en este caso @resul; posteriormente se realiza un select
sobre la variable(s), de los parámetros y para este caso específico el resultado es:

2. Funciones definidas por el usuario


Definición
Son como los procedimientos almacenados; es decir son un conjunto de
instrucciones, pero tienen algunas diferencias como las siguientes solo tienen
parámetros de entrada y siempre retornan un valor.
Las funciones muchas veces se utilizan para apoyar el procesamiento de datos en los
procedimientos almacenados, pero también se utilizan de manera independiente.
Para ejecutarlas de manera transaccional se hace mediante select
nombrefuncion(valorparametros), en cambio en un procedimiento se puede utilizar

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

en alguna estructura de control (por ejemplo, if nombrefuncion(valorparametros)


then …) o asignando el valor que retornan a un variable de la siguiente manera.
set variable=nombrefuncion(valorparametros);
Sintaxis
Delimiter//
Create function nombre función ([Parámetros tipodeDato]) Returns
tipodedatodelafuncion
Begin
Instrucciones;
Return valor;
End//
Delimiter;
En la sintaxis entre otros aspectos se puede observar que es necesario especificar el
tipo de dato que va a retornar la función mediante returns, así como también el uso
de return para retornar el valor de la función.
Ejemplos

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

3. Uso de cursores en las funciones y procedimientos almacenados


a. Definición
Es una estructura de control utilizada para el recorrido de los registros de una
consulta, el procesamiento individual de las filas devueltas por el DBMS para una
consulta.
Son bucles que sirven para recorrer el resultado de un query o consulta y guardar
los resultados en variables o hacer operaciones con otras tablas.
Es un objeto que apunta a las filas retornadas de una consulta, permite manipular
los datos de cada fila de forma individual.
Para crear cursores hay que saber construir procedimientos y funciones
almacenados en Mysql, ya que los cursores se crean dentro de las funciones y
procedimientos almacenados.
Sintaxis
La sintaxis general para crear un cursor es la siguiente.
Declarar el cursor
Para crear un cursor dentro de un procedimiento almacenado o en una función de usuario,
se utiliza la palabra declare de la siguiente forma:
Declare nombredelcursor Cursor For Consulta del tipo select;
Habiendo creado el cursor ahora se puede utilizar procede de la siguiente manera:

Abrir el cursor
Para abrir un cursor se hace uso de la palabra reservada open y la sintaxis es la siguiente.
Open nombre del cursor.
Recuperar los datos de cada registro del cursor
Cuando se crea el cursor, este recupera un conjunto de registro producto de la

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

consulta, entonces se necesita tomar los valores o campos de cada uno de sus
registros, para hacerlo se utiliza la palabra reservada Fetch de la siguiente forma:
Fetch nombre del cursor into variables donde se recuperarán los datos;
Cerrar el cursor
El último paso consiste en cerrar el cursor y esto se consigue con la palabra
reservada close, de la siguiente manera.
Close nombre del cursor;
Ejemplo:

Al ejecutar la función se muestra el siguiente resultado.

PROGRAMACIÓN III - 2022-I Mag. Ing. Miguel Angel Silva Zapata

También podría gustarte