Este documento describe los componentes y funcionalidades de los procedimientos almacenados en SQL. Explica que un procedimiento almacenado consta de una cabecera, parámetros y un cuerpo con sentencias SQL. También describe cómo los procedimientos almacenados permiten encapsular lógica de negocio de forma modular, mejorar el rendimiento al reutilizar planes de ejecución compilados y facilitar el control de seguridad limitando el acceso directo a las tablas.
1. Procedimientos almacenados Composición de un P.A. - Cabecera
(1ª Parte)
l Una cabecera que define el nombre con el
identificaremos a un P.A. Y lo
diferenciaremos de otros.
l Los parámetros de entrada y salida.
l Opciones de procesamiento del P.A.
Procedimientos almacenados Composición de un P.A. - Cuerpo
l Los procedimientos almacenados son l El siguiente elemento es el cuerpo del P.A. Que
contendrá una o mas sentencias SQL que se
objetos de BD que encapsulan colecciones ejecutarán mas adelante
de sentencias SQL transaccionales y que se
almacenan para un uso posterior. l CREATE PROC[EDURE] procedure_name
l [ {@parameter data_type} [= default] [OUTPUT] ]
[,...n]
l Podríamos decir que son como las
l AS
subrutinas y las funciones de otros lenguajes
l sql_statement [...n]
de programación
2. Función de un P.A. Parámetros
l Uno de los propósitos principales de un l Create procedure prGetEqId_2
procedimiento almacenado es el de devolver – @Make varchar(50),
una serie de valores de una forma útil. – @Model varchar(50),
– @EqId int Output
l Existen tres formas de devolver un resultado:
l as
l 1-. Resultset – select @EqId = EquipmentId
l 2-. Parámetros l from Equipment
l where Make = @Make
l 3-. Valores de retorno l and Model = @Model
Resultset Parámetros
l Para conseguir una lista de resultados, solo hemos de indicar l Declare @intEqId int
una sentencia que devuelva una lista de valores (por ejemplo l Execute prGetEqId_2 ' Toshiba', ' Portege 7020CT',
la clausula SELECT)
@intEqId output
l También podemos utilizar la llamada a otro P.A. Que devuelva
una lista de valores. l Select @intEqId 'Equipment Identifier'
l Es posible devolver varias listas diferentes de valores. Para
ello ejecutamos varios select en este P.A. o llamando a otros l Este lote devolverá el parámetro de salidaEquipment
P.A. Identifier
l Algunos métodos de acceso a los datos como RDO pueden l --------------------
acceder a todas las listas de resultados que devuelve un P.A.
l 1
Pero otros solo pueden recibir el primer conjunto o incluso
devolver un error l (1 row(s) affected)
3. Valores de retorno Combinación de salidas
l Declare @intEqId int,
l Create Procedure prGetEqId_ 3 l Create Procedure
prGetEqId_3 @intStatusCode int
l @Make varchar(50), l Execute @intStatusCode = prGetEqId_2 'Toshiba',
l @Make varchar(50),
l @Model varchar(50) 'Portege 7020CT',
l @Model varchar(50)
l as l as @intEqId output
l Declare @intEqId int l Return (select EquipmentId l Select @intEqId result, @intStatusCode ErrorCode
l Select @intEqId = EquipmentId l from Equipment
l from Equipment l where Make = @Make l El resultado de ejecutar este lote de instrucciones seria
l where Make = @Make l and Model = @Model)
l and Model = @Model l result ErrorCode
l ----------- -----------
Declare @intEqId int l 10
Execute @intEqId = prGetEqId_3 'Toshiba', 'Portege 7020CT'
l (1 row(s) affected)
Select @intEqId'Equipment Identifier'
Combinación de salidas
l Create Procedure prGetEqId _2 Parámetros opcionales
l @Make varchar(50),
l @Model varchar(50), l Create Procedure prGetEqId _4
l @EqId int output
l @Make varchar(50) = '%',
l As
l select @EqId = EquipmentId l @Model varchar(50) = '%'
l from Equipment l as
l where Make = @Make l Select *
l and Model = @Model l from Equipment
l Return @@Error
l where Make Like @Make
l and Model Like @Model
4. Parámetros opcionales Tipos de P.A.
l Execute prGetEqId_4 'T%', 'Portege%‘ l Definido por el usuario (user-defined)
l System
l Execute prGetEqId_4 'T%' l Extended
l Temporary
l Paso de parámetros por nombre l Global temporary
l Remote
l Execute prGetEqId_4 @Model = 'T%'
P.A. Con la opción WITH ENCRYPTION P.A. Definidos por el usuario
l CREATE PROC[EDURE] procedure_name [; number]
l [
l {@ parameter data_type} [VARYING] [= default] [OUTPUT] l Los que hemos visto hasta ahora.
l ]
l [,... n]
l [WITH { RECOMPILE
l | ENCRYPTION
l | RECOMPILE, ENCRYPTION }
l ]
l [FOR REPLICATION]
l AS
l sql_statement [... n]
5. El proceso de compilación y ejecución
P.A. De sistema Parsing
l El parsing es un proceso durante el cual MS SQL Server
comprueba que la sintaxis del comando sea correcta.
l Son procedimientos almacenados
l Si no existe ningún error sistáctico se trocea la sentencia en
unidades mas sencillas como las palabras claves,
identificadores y operadores
l Se almacenan en la B.D. Del sistema
(master y msdb) l Ahora solo queda construir una estructura que describa la serie
de pasos necesarios para realizar la operación que el cliente
pide.
l Tienen el prefijo sp_????? (System
l Si el lote contiene una consulta, la estructura interna se llama
Procedure) árbol de consulta y si contiene un procedimiento: árbol de
secuencia
El proceso de compilación y ejecución El proceso de compilación y ejecución
Compilación
l El árbol de secuencia se utiliza para crear un plan de ejecución
l Parsing
l El módulo de optimización analiza el modo en el que la información
puede ser recuperada de las tablas
l Compilation l Se busca el modo mas rápido y que menos recursos utiliza. Es dec ir
se busca eficiencia en tiempo y recursos.
l Añade operaciones extras como son la verificación de restricciones,
l Execution los disparadores, comprobación de la seguridad, etc
l El resultado es una estructura llamada plan de ejecución
l TODAVÍA NO HEMOS EJECUTADO NADA
6. El proceso de compilación y ejecución Reutilización de los planes de ejecución
Ejecución
l El plan de ejecución es almacenado en la cache de procedimiento y l Esta característica es lo que hace de los P.A. la
AHORA SI, ahora ejecutamos
mejor solución que tener almacenadas las consultas
l Pueden haber varios pasos en el plan de ejecución que se pueden
de mas uso.
enviar a diferentes módulos:
– el gestor de DML,
– el gestor DDL, l La misma consulta ejecutada N veces, requiere del
– el gestor de procedimientos, gestor de BD realice los tres pasos de parsing,
– el gestor de transacciones compilación y ejecución.
– el gestor de utilidades
l Los resultados son recogidos en la forma RESULTSET l En los P.A. pasamos directamente al plan de
ejecución.
l El RESULTSET es enviado al cliente
Reutilización de los planes de ejecución
Autoparametrización Reutilización de los planes de ejecución
l Sea la siguiente consulta
l SELECT FirstName LastName Phone, Fax, Email, OrgUnitId, UserName
, ,
l FROM Asset.dbo.Contact l Los planes de ejecución se dividen en dos partes:
l where ContactId = 3 – El propio código que se ejecutará
– El contexto
l Primero el SQL tratará de parametrizar la consulta de la siguiente forma,
creando un plan de ejecución
l El código se puede compartir entre varios usuarios
l SELECT FirstName LastName Phone, Fax, Email, OrgUnitId, UserName
, ,
l FROM Asset.dbo.Contact
l El contexto es propio de cada usuario
l whereContactId = @P1
l Las consultas posteriores que coincidan con este plan, reutilizarán el
esquema
l SELECT FirstName LastName Phone, Fax, Email, OrgUnitId, UserName
, ,
l FROM Asset.dbo.Contact
l whereContactId = 11
7. Reutilización de los planes de ejecución Mantenimiento de la integridad de la
B.D
l El plan de ejecución se elimina de la cache por el
proceso Lazywriter l La tarea más importante de un administrador de base de datos
es mantener la integridad de la misma.
l El P.E. se elimina cuando no ha sido utilizado por un l Si este administrador no es escrupuloso podremos encontrarnos
tiempo. con casos como los siguientes:
l ó – Canada aparecía con 109 provincias. Una de ellas era Francia
– La dirección de correo de un cliente era. “Hoy hace un día soleado”
l El P.E. Se elimina cuando ocurre alguna de estas
– Una misma impresora aparecía escrita de 10 formas distintas
cinco cosas
– Los datos han cambiado significativamente.
l LA redundancia, redundancia, redundancia, hay que evitarla.
– Se han creado o eliminado índices.
– Las restricciones han cambiado o añadido o borrado.
– La distribución estadística de los índices han cambiado
– Se llama a sp_recompile
El papel de los P.A. En el desarrollo Reglas complejas
de aplicaciones de base de datos
l Esto es por el uso de aproximaciones procedimientales y no
l Mantenimiento de la integridad de la B.D. procedimientales
l Implementación consistentes de reglas de negocio y
restricciones, todas ellas, complejas de implementar
l Diseño modular
l Mantenimiento
l Reducción del tráfico de red
l Ejecución mas rápida
l Control de la seguridad
8. Reducción del tráfico de red
Diseño modular
l Los P.A. Permiten a los programadores encapsular las l Una de las principales desventajas de una
funcionalidades de negocio y facilitan a los usuarios arquitectura de servidor de ficheros o una estructura
(normalmente otros programas) una interfaz mas fácil.
descentralizada es que existe un gran tráfico de
datos entre el servidor y el cliente.
l Los P.A. Se comportan como cajas negras.
l Los usuarios no tienen porque saber como estan l Una buena construcción actual de B.D. Implica que
implementados, sino qué es lo que hacen, qué parámetros hay el cliente reciba solo aquello que necesita. Los datos
que pasarles y qué resultado devuelven. intermedios no se pasan.
l Las personas estan limitadas por la cantidad de información
que son capaces de procesar. Los P.A. Facilitan esta labor
Mantenimiento Ejecución mas rápida
l Los P.A. Tienen varias ventajas de rendimiento
l El proceso de diseñar un sistema es cíclico. respecto a las consultas almacenadas
l Los sistemas necesitan ser revisados y mejorados . l Los P.A. Se almacenan de forma compilada en la
cache de P.A. => cuando se necesitan, no tenemos
l Ocultando la estructura de la B.D. Los que realizar el parsing y la recompilación.
administradores pueden reducir la necesidad de
cambiar otros componentes (aplicaciones de l Los P.A. ya estan optimizados
clientes, componentes intermedios
9. Control de la seguridad
l Una señal de un sistema de base de datos es que
evita que los usuarios accedan directamente a las
tablas y fuerzan a utilizar los P.A. Para funciones
específicas.
l Es más fácil gestionar los conjuntos de P.A. Por
funcionalidad que gestionar una tabla a nivel de
columnas.