Download Procedimientos de Almacenado

Document related concepts

Procedimiento almacenado wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Lenguaje de definición de datos wikipedia , lookup

PL/SQL wikipedia , lookup

Capa de acceso a datos wikipedia , lookup

Transcript
Procedimientos de
Almacenado
Rocío Contreras Águila
Primer Semestre 2010
Que es un PA?
• Un Procedimiento Almacenado es un
programa autocontrolado escrito en
lenguaje del DBMS, son almacenados
como parte de la Base de Datos y sus
metadatos.
Que es un PA?
• Una vez creado un procedimiento
almacenado, se puede invocar directamente
desde una aplicación, o sustituir el nombre
de una tabla o vista, por el nombre de
procedimiento en cláusulas SELECT.
• Los procedimientos almacenados pueden
recibir parámetros de entrada y retornar
valores a la aplicación.
Ventajas
• Diseño modular.
• Aplicaciones que acceden la misma
Base de Datos pueden compartir los
procedimientos almacenados,
eliminando el código doble y
reduciendo el tamaño de las
aplicaciones.
• El fácil mantenimiento.
Ventajas
• Cuando un procedimiento se actualiza,
los cambios se reflejan
automáticamente en todas las
aplicaciones, sin la necesidad de
recompilar y re linkear. Las
aplicaciones son compiladas sólo una
vez para cada cliente.
Ventajas
• Los procedimientos almacenados son
ejecutados por el servidor, no por el
cliente lo que reduce el tráfico en la red
y mejora el performance o desempeño,
especialmente para el acceso del
cliente remoto.
Ventajas
• Están almacenados en los servidores y
asegurados por las medidas tomadas
en la instalación, lo que impide que los
usuarios normales puedan modificarlos
e incluso desconocen su existencia.
Este es un elemento de gran valor en lo
que a seguridad respecta
Rendimiento
• Cada vez que un comando Transact-SQL, o
conjunto de comandos, es enviado el servidor
para su procesamiento, el servidor debe
determinar si el remitente tiene suficientes
privilegios para ejecutar esos comandos y si los
comandos son válidos.
• Una vez que los permisos y la sintaxis de los
comandos se han verificado, SQL Server
construye un plan de ejecución para procesar el
pedido.
Rendimiento
• Los procedimientos almacenados son más
eficientes en parte porque el
procedimiento es almacenado en el SQL
Server cuando se crea
• La sintaxis de los comandos contenidos
en un procedimiento almacenado se
comprueba que este libre de errores antes
de ser guardado.
Rendimiento
• El nombre del procedimiento almacenado se
almacena en la tabla SysObjects, mientras que
el texto del procedimiento se guarda en la tabla
SysComments.
• Invocar al procedimiento almacenado implica
ejecutar un solo comando en vez de cientos de
comandos que un procedimiento almacenado
podría contener.
Rendimiento
• La primera vez que se ejecuta el
procedimiento, se crea un plan de ejecución
y se compila al procedimiento almacenado
• Los procesamientos subsecuentes del
procedimiento almacenado son mucho más
rápidos ya que el SQL Server no vuelve a
controlar la sintaxis, ni recrea un plan de
ejecución, ni se recompila el procedimiento.
Rendimiento
• Por último se verifica el caché por si ya
existe un plan de ejecución para ese
procedimiento antes de generar un nuevo
plan de ejecución.
Marco de programación
• Una vez que se crea un procedimiento
almacenado, puede ser llamado todas las
veces que sea necesario
• Esta capacidad provee modulación y
habilita la reutilización del código.
Marco de programación
• La reutilización del código mejora el
mantenimiento de la base de datos al
aislar la base de datos de los cambios en
las prácticas del negocio.
• Si las reglas de negocios cambian en una
organización, se puede modificar a los
procedimientos almacenados para cumplir
con las nuevas reglas de negocio.
Marco de programación
• Todas las aplicaciones que llaman a esos
procedimientos almacenados cumplirán
con la nuevas reglas, sin tener que ser
directamente modificados.
Seguridad
• Otro capacidad importante de los
procedimientos almacenados es que mejoran la
seguridad a través de la encriptación y el
aislamiento.
• Los usuarios de las bases de datos pueden
tener permisos de ejecutar un procedimiento
almacenado sin tenerlos para acceder
directamente a los objetos de la bases de datos
sobre las que opera el procedimiento
almacenado.
Seguridad
• Además un procedimiento almacenado puede
ser encriptado cuando se lo crea o modifica
inhabilitando a los usuarios a leer los comandos
Transact-SQL contenidos en el procedimiento
almacenado.
• Esta capacidad de seguridad permite aislar la
estructura de la base de datos del usuario de la
base de datos, con la consiguiente ganancia en
seguridad.
Categorías de procedimientos
almacenados
• Existen cinco categorías :
1. procedimientos almacenados del
sistema,
2. procedimientos almacenados locales,
3. procedimientos almacenados
temporales,
4. procedimientos almacenados extendidos
y
5. procedimientos almacenados remotos.
Procedimientos almacenados del
sistema
• Los procedimientos almacenados del sistema
son guardados en la base de datos Master y
son típicamente identificados por el prefijo sp_
• Ellos realizan una amplia variedad de tareas
para soportar las funciones del SQL Server
soportando: llamadas de aplicaciones externas
para datos de las tablas del sistema,
procedimientos generales para administración
de las bases de datos, y funciones de
administración de seguridad.
Procedimientos almacenados del
sistema
• Por ejemplo, se pueden ver los privilegios de
una tabla usando el procedimiento almacenado
de catálogo sp_table_privileges.
• El comando siguiente utiliza este procedimiento
almacenado para mostrar los privilegios de la
tabla stores en la base de datos Pubs:
• USE Pubs
GO
EXECUTE sp_table_privileges Stores
Procedimientos almacenados
locales
• Los procedimientos almacenados locales
son usualmente almacenados en una base
de datos y están típicamente diseñados para
completar tareas en la base de datos donde
residen.
• Un procedimiento almacenado local se
podría crear también para personalizar
código de los procedimientos almacenados
del sistema.
Procedimientos almacenados
locales
• Para crear una tarea personalizada
basada sobre un procedimiento
almacenado del sistema, primero copie el
contenido del procedimiento almacenado
del sistema y guarde el nuevo
procedimiento almacenado y guarde el
nuevo procedimiento almacenado como
un procedimiento almacenado local.
Procedimientos almacenados
temporales
• Un procedimiento almacenado temporario
es similar a un procedimiento almacenado
local, pero existe sólo hasta que se cierre
la conexión que lo creó o se dé de baja el
SQL Server, dependiendo del tipo de
procedimiento almacenado
Procedimientos almacenados
temporales
• Los procedimientos almacenados
temporarios creados directamente en la
TempDB son diferentes a los
procedimientos almacenados locales y
globales en lo siguiente:
– Se pueden configurar permisos para ellos.
– Existen aún después que la conexión que los
creó se terminan
– No son removidos hasta que el SQL
Server no sea apagado.
Procedimientos almacenados
extendidos
• Un procedimiento almacenado extendido
usa un programa externo, compilado
como una DLL, para expandir las
capacidades de un procedimiento
almacenado.
Como se guarda un
procedimiento
• Cuando se crea un procedimiento, SQL
Server chequea la sintaxis de los
comandos Transact-SQL que incluye. Si la
sintaxis es incorrecta, SQL Server
generará un mensaje de error “sintax
incorrect” (sintaxis incorrecta), y el
procedimiento no será creado.
Como se guarda un
procedimiento
• Si el procedimiento pasa el chequeo de
sintaxis, el procedimiento se guarda,
escribiéndose su nombre y otras
informaciones en la tabla SysObject.
• El texto usado para crear el procedimiento
se escribe en la tabla SysComments de la
base de datos actual.
CREATE PROCEDURE
• Se puede usar el comando CREATE
PROCEDURE, o su versión abreviada,
CREATE PROC, para crear un
procedimiento almacenado en el Query
Analyzer.
CREATE PROCEDURE
• Cuando utiliza CRETE PROC, se pueden
realizar las siguientes tareas:
– Especificar agrupamientos de procedimientos
almacenados
– Definir parámetros de entrada-salida, sus
tipos de datos, y sus valores por defecto.
CREATE PROCEDURE
• Cuando se definen parámetros de entrada y
salida, estos siempre van precedidos por el
signo @, seguido del nombre del parámetro y
luego una designación del tipo de dato.
• Los parámetros de salida deben incluir la
palabra clave OUTPUT para diferenciarlos de
los de entrada.
• Usar códigos de retorno para mostrar
información acerca del éxito o falla de una tarea.
CREATE PROCEDURE
• Controlar si un plan de ejecución debería ser
guardado temporalmente para un
procedimiento.
• Encriptar el contenido del procedimiento
almacenado por razones de seguridad.
• Especificar las acciones que deberá tomar el
procedimiento almacenado cuando se
ejecute.
Proveer de contexto a un
procedimiento almacenado
• Con la excepción de los procedimiento
almacenado temporarios, un
procedimiento almacenado se crea
siempre en la base de datos actual.
Proveer de contexto a un
procedimiento almacenado
• Siempre se debe especificar la base de
datos actual usando el comando USE
nombre_base seguido por el por el
comando GO antes de crear un
procedimiento almacenado
Proveer de contexto a un
procedimiento almacenado
• Ejemplo:
USE Pubs
GO
CREATE PROCEDURE [dbo].[ListAuthorNames]
AS
SELECT [au_fname], [aufname]
FROM [pubs].[dbo].[authors]
Crear procedimientos
almacenados temporarios
• Para crear un procedimiento almacenado
temporal local, se agrega delante del
nombre del procedimiento el símbolo #.
• Este signo numeral instruye al SQL Server
para que cree el procedimiento en la
TempDB
Crear procedimientos
almacenados temporarios
• SQL Server ignora la base de datos actual
cuando crea un procedimiento temporal.
• Crear un procedimiento temporal local
CREATE PROCEDURE #localtemp
AS
SELECT * from [pubs].[dbo].[authors]
GO