Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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).
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
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.
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
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: