Saltar la navegación

5. SQL Procedural

Procedimientos almacenados

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.

Un procedimiento se invoca usando un comando CALL , y sólo puede pasar valores usando variables de salida.

Sintaxis para crear a un procedimiento almacenado

CREATE PROCEDURE nombreProcemiento (tipoParametro nombreParametro tipoDato, ...)
InstruccionesSQL ;

TipoParametro: IN, OUT, INOUT

Sintaxis para llamar a un procedimiento almacenado

CALL nombreProcemiento(parámetro1, ...);

Consideraciones

  • Cuando el procedimiento contiene dos o más instrucciones, se encierran entre los comandos BEGIN y END.
  • Al usar BEGIN y END para delimitar la declaración del procedimiento almacenado, se debe definir un nuevo delimitador o fin de bloque de instrucción, por medio del comando DELIMITER, es común emplear el nuevo delimitador doble diagonal, por medio de la instrucción: DELIMITER //
  • Al concluir la creación del procedimiento almacenado se debe restaurar el final de instrucción predeterminado, para ello se empleará la instrucción: DELIMITER ;

Ejemplo. Crear un procedimiento almacenado que cuente el total de libros a partir del nombre de la editorial.

1. Crear procedimiento

DELIMITER //

CREATE PROCEDURE procCuentaEdit (in entrada char(20), out salida int)
BEGIN
select count(*) into salida from libros natural join editoriales where nombre=entrada;
END //

DELIMITER ;

2. Ejecutar procedimiento y visualizar resultado

mysql> CALL procCuentaEdit('Alfaomega', @total);
Query OK, 1 row affected (0.01 sec)

mysql> select @total;
+--------+
| @total |
+--------+
| 3 |
+--------+
1 row in set (0.00 sec)

Notas adicionales para administrar procedimientos almacenados

1. Visualizar procedimientos almacenados de la base de datos biblioteca

SHOW PROCEDURE STATUS WHERE db = 'biblioteca';

2. Eliminar el procedimiento almacenado procCuentaEdit

DROP PROCEDURE procCuentaEdit;

Tarea 5.1 - Procedimientos almacenados

Fecha de entrega:
15 de diciembre
Modalidad:
Individual

Desarrollo de la actividad:

  • Leer el material relacionado con procedimientos almacenados
  • Practica los ejemplos presentados en el material
  • Desarrolla un script para crear una base de datos con al menos dos tablas relacionadas
  • Inserta información a cada una de las tablas
  • Crea dos procedimientos almacenados que interactúen con la información de la base de datos (no olvides describir su función y capturar pantallazos al ejecutarlos)

Detalles de la entrega:

  • Enviar al correo jpena@suryucatan.tecnm.mx
  • Adjuntar archivo en formato PDF, anexar:
    • El script de tu BD
    • La descripción de los procedimientos almacenados a realizar
    • El comando SQL a modo texto que implemente el procedimiento almacenado
    • El pantallazo al ejecutar el comando
  • Escribir el correo con asunto: 5A ó 5B + Apellido1 Nombre1 + - Tarea 5.1 (ejemplo del asunto de correo: 5B Peña Jimmy - Tarea 5.1)

Funciones

Una función es un programa realizado en un motor de base de datos similar a un procedimiento almacenado. Las funciones almacenadas en MySQL, se utilizan para encapsular cálculos u operaciones con registros y campos de datos que se toman de una consulta SQL.

1. Crear funciones

A) Cambiar delimitador o fin de instrucción

DELIMITER //

B) Sintaxis de la función

CREATE FUNCTION nombre(nombreParam1 tipoDato1, ...) RETURNS tipoDato [DETERMINISTIC | NOT DETERMINISTIC]
BEGIN
statements;
RETURN variable;
END

C) Restaurar delimitador

DELIMITER ;

2. Ejecutar funciones

SELECT nombre(valor1, ...);

3. Consultar funciones de la Base de Datos

SHOW FUNCTION STATUS WHERE DB="nombreBD";

4. Borrar funciones de la BD

DROP FUNCTION nombreFuncion;

Ejemplo: Hacer una función que calcule el área de un triángulo.

  • Crear la función

mysql> DELIMITER //
mysql> CREATE FUNCTION funcAreaT(base int, altura int) RETURNS float DETERMINISTIC
-> BEGIN
-> select (base * altura / 2) into @area;
-> RETURN @area;
-> END//
Query OK, 0 rows affected (0.02 sec)

mysql> DELIMITER ;

  • Ejecutar la función

mysql> select funcAreaT(6,10);
+-----------------+
| funcAreaT(6,10) |
+-----------------+
| 30 |
+-----------------+
1 row in set (0.00 sec)

mysql> select funcAreaT(6,10) AREA;
+------+
| AREA |
+------+
| 30 |
+------+
1 row in set (0.00 sec)

  • Borrar la función

mysql> drop function funcAreaT;
Query OK, 0 rows affected (0.01 sec)

mysql> select funcAreaT(6,10) AREA;
ERROR 1305 (42000): FUNCTION biblioteca.funcAreaT does not exist

Tarea 5.2 - Funciones

Fecha de entrega:
15 de diciembre
Modalidad:
Individual

Desarrollo de la actividad:

  • Leer el material relacionado con funciones
  • Practica los ejemplos presentados en el material
  • Desarrolla un script para crear una base de datos con al menos dos tablas relacionadas
  • Inserta información a cada una de las tablas
  • Crea dos funciones que interactúen con la información de la base de datos (no olvides describir su funcionalidad y capturar pantallazos al ejecutarlos)


Detalles de la entrega:

  • Enviar al correo jpena@suryucatan.tecnm.mx
  • Adjuntar archivo en formato PDF, anexar:
    • El script de tu BD
    • La descripción de las funciones a realizar
    • El comando SQL a modo texto que implemente la función
    • El pantallazo al ejecutar el comando
  • Escribir el correo con asunto: 5A ó 5B + Apellido1 Nombre1 + - Tarea 5.2 (ejemplo del asunto de correo: 5B Peña Jimmy - Tarea 5.2)