Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Leer
Leer
Procedimientos almacenados
Un procedimiento almacenado es un objeto perteneciente a una base de datos, que contiene
un conjunto de instrucciones SQL, tanto de consulta, como de manipulación de datos, como de
control de la secuencia del programa, asociados a un nombre, y que son ejecutados en
conjunto. Puede contener parámetros tanto de entrada como de salida (parámetros pasados
por referencia), así como devolver un valor de retorno.
Son precompilados al ejecutarse por primera vez, y no vuelven a ser compilados con las
subsiguientes ejecuciones, lo que proporciona una cierta mejora en el rendimiento. No
obstante si se desea se puede forzar su recompilación.
Una de las principales ventajas de este tipo de objetos, es que al residir en la propia base de
datos son compartibles por todos los usuarios, pudiendo de esta manera beneficiarse de los
distintos cachés del servidor. Al mismo tiempo al ser código externo a la aplicación puede ser
alterado sin que exista siempre la necesidad de modificar el código de la misma.
Al ser objetos de la base de datos se hallan sujetos a los esquemas de seguridad determinados
por el administrador de la misma:
Existen diversas clases de procedimientos almacenados, entre los que se encuentra los
procedimientos almacenados del sistema, que sirven de herramientas para la realización de
distintas tareas de administración.
Un procedimiento almacenado se crea con la sentencia CREATE PROCEDURE, que debe ser
la única dentro de un mismo batch. La creación de un procedimiento almacenado puede ser
realizada bien desde el ISQL_W, bien desde la opción Manage.Stored Procedures del
Enterprise Manager, o bien desde la propia ventana donde se muestran los objetos de la base
de datos, en el grupo correspondiente a los procedimientos almacenados, dentro de esta
última herramienta.
Donde:
1
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
El símbolo @ es necesario no sólo en la declaración sino que
forma parte del propio nombre. La claúsula OUPUT determina
que dicho parámetro será utilizado para pasar información al
código llamador, es decir, viene a ser un parámetro pasado por
referencia.
CREATE VIEW
CREATE DEFAULT
CREATE RULE
CREATE PROCEDURE
CREATE TRIGGER
Código Significado
-2 Error de tipo de datos
-4 Error de Permisos
-5 Error de Sintaxis
-13 Base de Datos Corrupta
Ejemplos
Como base de datos de trabajo para los ejemplos se a utilizado SOPORTEDB cuya estructura
es accesible por todos, con lo cual no se detalla en este documento ningún elemento referente
a dicha estructura.
2
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Procedimiento 1
Es un procedimiento simple, sin parámetros que devuelve un conjunto de filas que cumplen
siempre la misma condición.
Llamada:
EXECUTE prod_1
Procedimiento 2
Llamada:
Procedimiento 3
3
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
FROM PRODUCTOS
WHERE IDTIPROD = @p_CodTipProd
Llamada:
Procedimiento 4
Es un procedimiento almacenado que realiza inserciones en una tabla, con los valores
devueltos por un subquery realizado sobre otra tabla que tiene la misma estructura. El valor
devuelto por el procedimiento almacenado, es el número de filas insertadas.
Llamada:
Triggers
Un trigger es un tipo especial de procedimiento almacenado que se ejecuta automáticamente
al intentarse efectuar una modificación de los datos, en la tabla a la que se encuentran
asociados.
Las operaciones que pueden “disparar” un trigger son las correspondientes a las instrucciones
SQL, INSERT, UPDATE y DELETE.
Puede definirse un trigger para cada una de ellas, o bien definir un trigger asociado a una
combinación de las mismas.
El hecho de tener algún trigger asociado a una tabla, incide de forma negativa en cuanto al
rendimiento se refiere, si bien la mayor parte del tiempo empleado en su ejecución
corresponde al acceso a las diferentes tablas implicadas en los chequeos de integridad.
4
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
En relación a la creación de los triggers, las herramientas disponibles son las mismas que en el
caso de los procedimientos almacenados, si bien deberán utilizarse las opciones
correspondientes.
Donde:
Aunque desde el trigger pueden referenciarse objetos de otras bases de datos, éste sólo puede
se creado en la base de datos en curso.
Los triggers pueden ser anidados y permiten un nivel máximo de anidamiento de 16. En caso
de que un trigger caiga en un bucle infinito, se acabará producción un error de desbordamiento
del nivel de anidamiento.
Los triggers no son reentrantes lo que quiere decir que en caso de que un trigger en ejecución,
realice una actualización que provoque la activación del mismo, tal activación no se producirá.
Con relación a las transacciones hay que decir que en el caso de comenzarse una transacción
y activarse un trigger que contenga y ejecute el comando ROLLBACK TRANSACTION, éste
deshará la transacción completa iniciada antes de su activación.
5
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Otra de las mayores utilidades de los triggers es deshacer transacciones iniciadas antes de su
activación, como consecuencia de un error detectado durante su ejecución.
Ejemplos
Seguidamente se muestran algunos ejemplos de triggers.
Trigger 1
La tabla CPOSTALES no está sometida a ningún control de integridad referencial, con lo cual
para evitar eliminar una fila que tenga una referencia en la tabla CLIENTES, se define un
trigger que impida tal hecho. Dado que la acción a realizar es deshacer una transacción,
suponemos que ésta ha sido previamente iniciada en el procedimiento principal.
Trigger 2
Partiendo de la tabla del ejemplo 1, estableceremos un trigger que efectúe una actualización
en cascada, en el supuesto de intentar modificar un código postal que contenga referencias en
la tabla Cliente.
IF @p_cuenta > 1
BEGIN
UPDATE CLIENTES
SET CLIENTES.IDPROVIN = updated.IDPROVIN,
CLIENTES.RESTCDPOSTAL = updated.RESTCDPOSTAL
WHERE CLIENTES
6
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
RAISERROR (‘FILAS ACTUALIZADAS EN TABLA CLIENTES’, 16, -1)
END
Función RaiseError
Esta función es utilizada para comunicar errores al cliente, definidos por el programador.
Los mensajes correspondientes a estos errores, pueden residir en una tabla especial de la
base de datos, llamada sysmessages, o bien pueden ser creados en tiempo de ejecución.
Cada error tiene asociado un código numérico de 5 dígitos, un literal, y otros valores añadidos
que se comentarán más adelante.
Los errores definidos por el usuario deben tener un código no inferior a 50001, debido a que el
resto están reservados por el sistema.
Para los errores definidos en tiempo de ejecución, este código es asignado automáticamente
por el sistema y es igual a 50000.
La forma en que se especifican éstos y sus tipos, guarda semejanza a la utilizada por la
función Printf del lenguaje C.
Donde:
Argumentos de sustitución
La sintaxis del argumento es la siguiente:
%[[flag][ancho][precision][{h|i}]]Tipo
Donde:
7
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Valores
- Menos Ajuste a la izquierda
+- Signo Antepone el signo
0 Cero añade ceros
# Antepone # a valores octales, y hexadecimales
‘‘ Blanco Antepone un blanco si con signo y positivo
Tipo Significado
d,i Entero con signo
o Octal sin signo
p Puntero
s Cadena
u Entero sin signo
x,X Hexadecimal sin signo
La sintaxis es la siguiente:
sp_addmessage id_msg,gravedad,mensaje[,idioma[,true|false[,REPLACE]]]
Donde:
8
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS