1. BASE DE DATOS I
DOCENTE: MARCO AURELIO PORRO CHULLI
TEMA: PROCEDIMIENTOS
ALMACENADOS
2. DEFINICIÓN
UN PROCEDIMIENTO ALMACENADO (STORED PROCEDURE EN INGLÉS)
ES UN PROGRAMA (O PROCEDIMIENTO) ALMACENADO FÍSICAMENTE
EN UNA BASE DE DATOS. SU IMPLEMENTACIÓN VARÍA DE UN GESTOR
DE BASES DE DATOS A OTRO.
LA VENTAJA DE UN PROCEDIMIENTO ALMACENADO ES QUE AL SER
EJECUTADO, EN RESPUESTA A UNA PETICIÓN DE USUARIO, ES
EJECUTADO DIRECTAMENTE EN EL MOTOR DE BASES DE DATOS, EL
CUAL USUALMENTE CORRE EN UN SERVIDOR SEPARADO. COMO TAL,
POSEE ACCESO DIRECTO A LOS DATOS QUE NECESITA MANIPULAR Y
SÓLO NECESITA ENVIAR SUS RESULTADOS DE REGRESO AL USUARIO,
DESHACIÉNDOSE DE LA SOBRECARGA RESULTANTE DE COMUNICAR
GRANDES CANTIDADES DE DATOS SALIENTES Y ENTRANTES.
3. Sintaxis
Create Procedure Y Create Function
CREATE PROCEDURE sp_name ([parameter[,...]])
[characteristic ...] routine_body
CREATE FUNCTION sp_name ([parameter[,...]])
RETURNS type
[characteristic ...] routine_body
parameter:
[ IN | OUT | INOUT ] param_name type
type:
Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body:
procedimientos almacenados o comandos SQL válidos
4. ALTER PROCEDURE Y ALTER FUNCTION
ALTER {PROCEDURE | FUNCTION} SP_NAME [CHARACTERISTIC ...]
CHARACTERISTIC:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL
DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'STRING'
5. DROP PROCEDURE Y DROP FUNCTION
DROP {PROCEDURE | FUNCTION} [IF EXISTS] SP_NAME
SHOW CREATE PROCEDURE Y SHOW CREATE FUNCTION
SHOW CREATE {PROCEDURE | FUNCTION} SP_NAME
SHOW PROCEDURE STATUS Y SHOW FUNCTION STATUS
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'PATTERN']
LA SENTENCIA CALL
CALL SP_NAME([PARAMETER[,...]])
6. EL COMANDO CALL INVOCA UN PROCEDIMIENTO DEFINIDO PRÉVIAMENTE CON CREATE
PROCEDURE.
CALL PUEDE PASAR VALORES AL LLAMADOR USANDO PARÁMETROS DECLARADOS COMO OUT O
INOUT . TAMBIÉN “RETORNA” EL NÚMERO DE REGISTROS AFECTADOS, QUE CON UN PROGRAMA
CLIENTE PUEDE OBTENERSE A NIVEL SQL LLAMANDO LA FUNCIÓN ROW_COUNT() Y DESDE C
LLAMANDO LA FUNCIÓN DE LA API C MYSQL_AFFECTED_ROWS().
7. Sentencia compuesta BEGIN ... END
[etiqueta_inicio:] BEGIN
[lista_sentencias]
END [etiqueta_fin]
La sintaxis BEGIN ... END se utiliza para escribir
sentencias compuestas que pueden aparecer en el
interior de procedimientos almacenados y triggers.
8. Sentencia DECLARE
DECLARE handler_type HANDLER FOR condition_value[,...]
sp_statement
handler_type:
CONTINUE
| EXIT
| UNDO
condition_value:
SQLSTATE [VALUE] sqlstate_value
| condition_name
| SQLWARNING
| NOT FOUND
| SQLEXCEPTION
| mysql_error_code
9. Administracion de Procedimientos
(Creación, modificación, elijación)
Creacion:
CREATE PROCEDURE total_factura (@id_factura INT)
AS
BEGIN
SELECT SUM(UNIDADES*PRECIO) FROM RENGLON
WHERE RENGLON.IDFACTURA = @id_factura;
END;
10. Modificacion:
ALTER PROCEDURE modificar_cliente
(@id_cliente INT, @nombre_cliente
VARCHAR (20), @apellido_cliente VARCHAR (20))
WITH ENCRYPTION
AS
UPDATE CLIENTE
SET NOMBRE=@nombre_cliente,APELLIDO=@apellido_cliente
WHERE IDCLIENTE=@id_cliente;
Eliminación:
DROP { PROC | PROCEDURE } { [ schema_name. ] procedure } [ ,...n ] DROP
PROCEDURE nombre_procedimiento
Ejemplo.
drop procedure pa_libros_autor;