Beruflich Dokumente
Kultur Dokumente
Estructura de contenidos
Pág.
Introducción........................................................................................................................3
Mapa de contenidos...........................................................................................................4
1. Generalidades................................................................................................................5
2. Procedimientos almacenados........................................................................................6
2.1. Creación de procedimientos almacenados sin parámetros en MySQL.......................9
2.2. Creación de procedimientos almacenados con parámetros.................................... 12
2.2.1. Creación de procedimientos almacenados con parámetros en MySQL............... 13
2.2.2. Creación de procedimientos almacenados con parámetros tipo IN en Oracle..... 16
2.2.3. Creación de procedimientos almacenados con parámetros tipo OUT en Oracle. 20
2.2.4. Creación de procedimientos almacenados con parámetros tipo IN y OUT en
Oracle.............................................................................................................................. 22
2.2.5. Creación de procedimientos almacenados sin parámetros en SQL Server.......... 23
2.2.6. Creación de procedimientos almacenados con parámetros en SQL Server......... 25
3. Funciones.................................................................................................................... 29
3.1. Funciones en MySQL............................................................................................... 29
3.2. Funciones en Oracle................................................................................................ 30
3.3. Funciones en SQL Server........................................................................................ 30
4. Triggers....................................................................................................................... 33
4.1. Triggers en MySQL................................................................................................... 33
4.2. Trigger en Oracle...................................................................................................... 38
4.3. Trigger en SQL Server.............................................................................................. 46
Glosario........................................................................................................................... 50
Bibliografía...................................................................................................................... 51
Control de documento..................................................................................................... 52
Existen tres herramientas básicas que son los Procedimientos Almacenados, Funciones
y Triggers que son comunes en su conceptualización en los diferentes motores de bases
de datos, pero que difieren en su codificación.
En este recurso didáctico se hará una introducción a cada una de estas herramientas,
especificando para que sirven, en qué momento se deben de utilizar, su sintaxis, si reciben
o no parámetros, cómo son ejecutadas y los valores devueltos. Igualmente, se presentan
ejemplos prácticos de su utilización para una mejor comprensión de los temas tratados.
Mapa de contenidos
que
son Miniprogramas permitan
PROCEDIMIENTOS
FUNCIONES TRIGGERS
ALMACENADOS
la ejecución
como Datos
de
como
Desarrollo de contenidos
1. Generalidades
Se centrará la atención en la
construcción de programas usando
lenguaje transaccional SQL, con el
fin de proporcionar funcionalidades
que son implementadas en la base
de datos y utilizadas por la capa de
datos.
2. Procedimientos almacenados
Los procedimientos almacenados son subprogramas que ejecutan una acción específica
y no devuelven ningún valor. Tienen un nombre, un conjunto de parámetros (opcional) y
un bloque de código. Dependiendo del Sistema de Gestión de Base de Datos (SGBD) la
sintaxis y los parámetros pueden variar.
Por otro lado, mejoran el rendimiento en los equipos clientes, debido a que envía menos
información al servidor, aunque aumenta la carga del servidor.
CREATE NOMBRE
(PARÁMETROS)
PROCEDURE PROCEDIMIENTO
Instrucciones SQL
Por cada uno de los parámetros que se requieran se debe hacer la siguiente especificación:
Nota: Para los ejemplos presentados en esta plantilla se utilizará la base de datos del
consultorio médico tratada en materiales anteriores. A continuación, se presenta el
modelo relacional y el diccionario de datos.
Modelo Relacional:
TRATAMIENTOS MEDICOS
TraNumero 1 MedIdentificacion
TraFechaAsignado MedNombres
TraDescripcion CITAS MedApellidos
TraFechaInicio CitNumero
TraFechaFin CitFecha
TraObservaciones PACIENTES
11 CitHora
TraPaciente PacIdentificacion
CitPaciente
PacNombres
CitMedico
PacApellidos
CitConsultorio
PacFechaNacimiento
CitEstado
PacSexo
CitObservaciones
CONSULTORIOS
1
ConNumero
ConNombre
Diccionario de Datos:
El siguiente ejemplo, ilustra un procedimiento básico, que consta de una sola sentencia
SQL. El procedimiento almacenado llamado listarconsultorios cuyo objetivo es listar
todos los datos de la tabla consultorios se presenta a continuación:
Procedimiento almacenado
Figura 4. Creación del procedimiento almacenado.
FAVA - Formación en Ambientes Virtuales de Aprendizaje
call <nombre_procedimiento>();
ConNumero ConNombre
1 Laboratorio Dental
2 Consultorio 1
3 Toma de muestras
mysql>
call listapacentes();
mysql>
mysql> call listaconsultorios();
En los ejemplos anteriores después del nombre del procedure se incluían unos paréntesis,
los cuales estaban vacíos; para los ejemplos de esta sección los paréntesis llevan
información, y esta información se convertirá en el parámetro del procedimiento.
Para este proceso, iniciar con listar los datos de todas las pacientes mujeres que están
registradas en la entidad pacientes, para este caso el criterio de búsqueda es el campo
sexo, que para este ejemplo se llama PacSexo y la condición que es que sea mujer. Es
importante aclarar que esta condición es sensible a mayúsculas y minúsculas.
Es una buena práctica especificar los campos que la consulta devuelve, de esa manera
se tiene un mejor control de los datos devueltos por la consulta.
Select *
from pacientes
Where PacSexo=’F ’;
Donde el simbolo * determina que se devuelvan todos los campos de la tabla. Cuando
una tabla tiene muchos campos, la opción de select * no es recomendable porque hace
que la consulta demore más en su ejecución debido a que trae todos los campos de la
tabla. En este caso, es mejor especificar los campos a devolver en la consulta.
En ese orden de ideas, como el campo que se tiene para la consulta es PacSexo y
este campo solo recibe F o M, el tipo_de_dato_del_parámetro, es de tipo varchar(1). La
sentencia para construir el procedure de este ejemplo es:
Ahora visualizar los nombres, apellidos y documento de identidad de los pacientes que
se han realizado como tratamiento, un blanqueamiento dental. Recordemos que los
datos básicos de los pacientes se encuentran en la entidad “pacientes”, mientras que
el tratamiento se encuentra en la entidad “tratamientos”, la consulta SQL sería de la
siguiente manera:
Note que dentro del paréntesis va Blanqueamiento Dental entre comilla sencilla, por
ser un campo tipo text y por ser el tipo de tratamiento que deseamos listar.
Una vez se configura los parámetros del procedimiento, se hace clic en el icono de
“siguiente”; el asistente presenta la pantalla para que se digite la respectiva instrucción
SQL, en este caso con la cláusula insert.
Cuando el procedimiento tiene errores aparece con una franja vertical roja antes del
nombre de dicho procedimiento.
Los procedimientos almacenados con argumentos tipo OUT, son los utilizados para
generar las salidas del sistema, esto significa que se han trabajado las instrucciones con
la cláusula select.
La cláusula select puede ser utilizada de manera simple, es decir sin condiciones, o
de manera compuesta, con condiciones mediante la utilización del where. El manejo
del select, se ha trabajado en el objeto de aprendizaje anterior denominado “Construir
sentencias SQL para la definición y manipulación del modelo de base de datos”; con base
en el ejemplo del listado de los consultorios que se realizó en MySQL y ahora trabajarlo
desde ORACLE.
“SYS_REFCURSOR”, este tipo de dato es el que permitirá generar los datos que trae la
consulta.
a. Clic en el icono Explorador de Objetos, opción SQL, donde aparecerá el espacio para
digitar la instrucción SQL correspondiente a la creación del procedimiento:
c. Al final clic en el botón ejecutar para que el procedure quede grabado en el sistema.
Listar los datos de los pacientes que se han realizado como tratamiento un “Blanqueamiento
Dental”.
FAVA - Formación en Ambientes Virtuales de Aprendizaje
Figura 20. Lista de tablas de la base de Figura 21. Lista de procedimientos almacenados de
datos CITAS. la base de datos CITAS.
Los parámetros deben de comenzar con el símbolo @ y deben de tener un tipo de datos
válido. Cuando el procedimiento almacenado tiene parámetros, estos deben de ser
provistos en el momento de su ejecución. Cuando el parámetro no tiene implícito la palabra
FAVA - Formación en Ambientes Virtuales de Aprendizaje
reservada OUTPUT, el
motor de base de datos
interpreta este parámetro
como de entrada (IN).
En el siguiente ejemplo,
se utiliza un parámetro
de entrada, para un
procedimiento almacenado
que tendrá como resultado
los pacientes de género
Masculino ‘M’ o género
Femenino ‘F’:
Una vez creado el código del procedimiento almacenado, se puede utilizar los siguientes
comandos:
Figura 25. Ejecución de un procedimiento almacenado con parámetros OUTPUT en SQL Server.
Figura 26. Comando EXECUTE para ejecutar procedimientos almacenados en SQL Server.
3. Funciones
Sintaxis:
delimeter//
CREATE FUNCTION nombre_funcion (parámetro)
Returns tipo
BEGIN
[características] definición
END
//
Como ejemplo, se va a construir una función para que cuente los pacientes que están
registrados en la tabla pacientes, la sintaxis sería la siguiente:
Es muy importante realizar esta definición, porque
delimiter//
con él termina la declaración de la función.
CREATE FUNCTION Se informa que esta función va a retornar, un valor
contarpacientes() RETURNS int de tipo numérico (int)
BEGIN Inicio del bloque de código para la función.
Se declara la variable que se va a retornar, OJO
DECLARE cantidad int;
debe ser del mismo tipo de returns.
Instrucción SQL para la consulta, note que se utilizó
select count(*) INTO cantidad
la palabra reservada INTO para asignar la variable
FROM pacientes;
declarada anteriormente.
RETURN cantidad Se retorna el resultado generado por el count.
END Fin de la programación de la función.
// Cierres del delimitador.
Una función en Oracle, al igual que en MYSQL, devuelve valores, esa es la diferencia
respecto a un procedimiento almacenado.
Una función definida por el usuario (User-defined functions “UDF”) es una rutina de
Transact-SQL que puede aceptar parámetros, realizar una acción, como un cálculo
complejo, y retornar el resultado de esa acción como un valor. El valor devuelto puede
ser un valor escalar (único) o una tabla.
4. Triggers
Los eventos que activan un trigger pueden ser las sentencias INSERT, DELETE, UPDATE
que pueden modifican los datos de una tabla. Los triggers se pueden ejecutar antes
(BEFORE) y/o después (AFTER) de que sean modificados los datos.
Los triggers tienen dos palabras clave, OLD y NEW que se refieren a los valores que
tienen las columnas antes y después de la modificación. Los INSERT permiten NEW, los
DELETE sólo OLD y los UPDATE ambas.
Paso 2. Crear los triggers para almacenar los cambios generados a la tabla pacientes,
específicamente registros actualizados y eliminados.
Paso 2.1. Trigger para auditar registros actualizados: El objetivo de este trigger es llevar
el control de los cambios realizados a los datos de los pacientes ya incluidos en la tabla
“pacientes”. La instrucción es la siguiente:
Ahora a verificar la función del trigger, como se configuró con la opción de actualización,
se va a modificar un registro con la instrucción update, la sintaxis podría ser:
Paso 2.2. Trigger para auditar registros eliminados: Una vez registrado un paciente, es
muy importante llevar el histórico de estos, es por ello, que, si se requiere eliminar un
registro, se deben dejar almacenados en la tabla de históricos, los datos que se eliminaron
con el respectivo usuario y la fecha en la que se realizó el proceso; esa es la función de
la tabla de Auditorias.
(audi_NombreAnterior, audi_ApellidAnterior,
audi_FechaAnterior,
audi_SexoAnterior, audi_NombreNuevo, audi_
ApellidoNuevo, Campos en el estricto orden de la
audi_FechaNueva, audi_SexoNuevo, audi_ tabla de auditorias.
FechaModificacion,
audi_usuario, audi_PacIdentificacion, audi_
accion)
Values (old.PacNombres, old. PacApellidos, Todos los campos de la tabla
old.PacFechaNecimiento, oldPacSexo, now(), auditada, "pacientes" llevan
current_user(), old. PacIdentificacion, 'Registro la palabra old, para conservar los
Eliminado'); datos que fueron eliminados.
Para crear un disparador en Oracle, se debe crear, al igual que en MYSQL, una tabla
para manejar el histórico de las transacciones realizadas, la tabla que se va a crear es la
siguiente y los campos deben manejar los tipos de datos acorde con la tabla a auditar:
Luego se hace clic en el botón crear, a continuación, cinco aspectos a tener en cuenta
para codificar el disparador.
Recuerde que existen las palabras reservadas old (información actual, note que antes
de la palabra old van dos puntos) y new (para la nueva captura, igual antes de la palabra
new, van los dos puntos).
El sistema nos presenta el código construido, para analizar el código construido, se puede
hacer clic en terminar o en anterior, en ocasiones el código SQL puede estar bien, pero
pueden suceder errores como el siguiente:
Se debe hacer clic en el botón activar, para que el asistente nos permita activar el
respectivo disparador, probablemente aparezca más de un disparador para activar.
Y para terminar el proceso de activación del disparador se hace clic en el botón terminar, si
se logró activar correctamente el disparador a la tabla aparecerá la siguiente presentación.
Ahora para verificar que el disparador está funcionando y que se están enviando los
datos a la tabla auditoria_pacientes; en el editor de comandos de SQL, al cual se llega
haciendo clic en el icono SQL.
Esta identificación debe ser de un registro que esté incluido en la tabla pacientes.
Y para verificar que la información que se acabó de modificar quedo en la tabla auditoria_
pacientes, se utiliza la siguiente instrucción:
Los triggers en SQL Server manejan dos tablas especiales que contienen toda la
información que se necesitan: inserted y deleted. Ambas tablas son subconjuntos de la
tabla que contiene el trigger, precisamente con los registros afectados por la sentencia
desencadenante.
La tabla especial deleted, contiene los registros con los viejos valores para triggers que
se desencadenan con sentencias DELETE (registros borrados) y UPDATE (valor anterior
para los registros actualizados).
Mientras que la tabla especial inserted, contiene los registros con los nuevos valores para
triggers que se desencadenan con sentencias INSERT (nuevos registros) y UPDATE
(nuevo valor para registros actualizados).
FAVA - Formación en Ambientes Virtuales de Aprendizaje
Con base en el ejercicio de la Auditoría de la tabla Pacientes, se procede con las siguientes
actividades:
Figura 56. Inserción de registro en tabla Pacientes y consultas de tablas Pacientes y Auditoria.
• Se procede a realizar la actualización sobre el nuevo registro, con el comando
Update y se realiza la consulta sobre las tablas Pacientes y Auditoría:
Figura 57. Actualización de registro en tabla Pacientes y consultas de tablas Pacientes y
Auditoria.
Glosario
INTOUT: indica que el parámetro del trigger será tanto de Entrada como de
salida.
Trigger: disparador.
Bibliografía
Nielsen P. (2008). Microsoft SQL Server 2008 Bible. Wiley Publishing Inc.
Oracle Database 11g. (2009). Develop PL/SQL Program Units. Volumen I. Student Guide.
Control de documento
Registered trademark