0% encontró este documento útil (0 votos)
28 vistas39 páginas

Procedimientos Almacenados en SQL Server

Un Procedimiento Almacenado (PA) es un programa auto controlado en un DBMS que permite modularidad, reutilización de código y mejora de rendimiento al ejecutarse en el servidor. Ofrece ventajas como fácil mantenimiento, seguridad mejorada y eficiencia en el procesamiento de comandos. Existen diferentes tipos de PAs, incluyendo los del sistema, locales, temporales, extendidos y remotos, cada uno con características específicas y aplicaciones en la gestión de bases de datos.

Cargado por

ruben.rodriguez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
28 vistas39 páginas

Procedimientos Almacenados en SQL Server

Un Procedimiento Almacenado (PA) es un programa auto controlado en un DBMS que permite modularidad, reutilización de código y mejora de rendimiento al ejecutarse en el servidor. Ofrece ventajas como fácil mantenimiento, seguridad mejorada y eficiencia en el procesamiento de comandos. Existen diferentes tipos de PAs, incluyendo los del sistema, locales, temporales, extendidos y remotos, cada uno con características específicas y aplicaciones en la gestión de bases de datos.

Cargado por

ruben.rodriguez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

SISTEMAS

TRANSACCIONALES
PROCEDIMENTOS ALMACENADOS
Que es un PA?
Un Procedimiento Almacenado es un programa
auto controlado escrito en lenguaje del DBMS,
son almacenados como parte de la Base de Datos
y sus metadatos.
• 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.
• 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.
• 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.
• 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.
• 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.
• 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.
• 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.
• 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.
• 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.
• 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 loca

• 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.
• 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
• 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 procedimien

• 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.
• 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.
• 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.
• 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
Transact SQL

Desencadenadores
TRIGGERS
Disparadores (Triggers)
• Los triggers son bloques PL/SQL que se ejecutan de
manera implícita cuando se ejecutan operaciones
(eventos DML) INSERT, DELETE, UPDATE a
una tabla*.
• Se usan principalmente para establecer reglas
complejas de integridad y labores de auditoría.

¿Por ejemplo?
* También existen triggers que se disparan ante eventos de DDL (ej.
BEFORE DDL) y eventos de database (ej. LOGON y LOGOFF) y
sobre otros objetos de la BD (vistas, DATABASE, entre otros).
• Un trigger tiene asociado:

• Un evento
• Un momento
• Un tipo

• El evento se refiere a la operación que se efectúa


sobre la tabla (INSERT, DELETE o UPDATE).
• El momento, se refiere a cuándo se dispara el trigger
en relación con el evento. Sus posibles valores son
BEFORE y AFTER*.
• El tipo indica el número de veces que el cuerpo del
trigger se ejecuta: por la operación en conjunto
(trigger de operación) o por cada fila procesada
(trigger de fila). En este último caso se debe adicionar
la cláusula FOR EACH ROW

* Y también INSTEAD OF para vistas.


• Haciendo las diferentes combinaciones, para una
tabla se pueden crear máximo doce tipos de triggers
• Se pueden tener varios triggers del mismo tipo
asociados con una misma tabla
• Los triggers se ejecutan implícitamente cuando
ocurre el evento
• Normalmente en los triggers no se puede* usar ni
COMMIT ni ROLLBACK

*
Es posible con autonomous transactions, por simplicidad se omitirán.
Sintaxis esencial de un trigger:

CREATE [OR REPLACE] TRIGGER nombre_trigger


Para especificar
momento evento ON tabla triggers de fila
[FOR EACH ROW
[WHEN condición]]
bloque de PL/SQL

Si el evento es UPDATE, se puede(n) especificar


la(s) columna(s) que dispararán el trigger con la palabra
OF (si no se especifican, el trigger se dispara con cualquier
columna de la tabla que sea actualizada)
Evento Valor Valor
Si es un trigger anterior nuevo
de fila, se puede
INSER NULL El valor que
acceder al valor T se va a
de una columna antes insertar
de la actualización DELET El valor NULL
con :OLD.nomcolum E antes del
na borrado
y al valor después de UPDAT El valor El valor
la actualización con E antes de la después de
actualiza- la actualiza-
:NEW.nomcolumna
ción ción
• La ejecución de un trigger es transaccional, es decir, si un trigger de fila afecta n
registros y si uno solo de ellos aborta, entonces todo el proceso se aborta.

• El orden de ejecución de los triggers es el siguiente:


1. Se ejecutan (si los hay*) los triggers BEFORE de operación
2. Se ejecutan sucesivamente para cada fila:
- (Si los hay*) los triggers BEFORE de fila
- Se ejecuta la operación DML correspondiente**
- (Si los hay*) los triggers AFTER de fila
3. Se ejecutan (si los hay*) los triggers AFTER de operación

* Si hay varios triggers con idéntica definición (a partir de Oracle 8i),


el orden de ejecución entre ellos es “aleatorio”  Ver diapositiva final.
** Tarea: analizar en relación con los triggers cuando se realizan las verificaciones de integridad
(clave primaria, foránea, checks, entre otras).
EJERCICIO PRACTICO TRIGGERS
• Descargar la tabla de prueba (PRODUCTOS)
• Crear una nueva BD llamada pruebaTrigger, Importar la tabla
(PRODUCTOS) en phpmyadmin

Recuerde habilitar la casilla para ordenar


Las columnas de la tabla
TRIGGER INSERCION
• Procederemos a realizar un Trigger de inserción dentro de la base de
datos crearemos una tabla de respaldo llamada REG_PRODUCTOS

• Posteriormente realizaremos el Trigger que denominaremos


PRODUCTOS_AI
• Finalmente realizaremos la acción de inserción para que el Trigger
dispare la acción después de realizar la inserción

• Consultamos que el registro halla sido registrado


• Finalmente revisamos la tabla REG_PRODUCTOS para validar el
registro insertado según el momento de su consulta se establecera
una auditoria del momento del registro
TRIGGER ACTUALIZACION

• Realizaremos una tabla de respaldo llamada


PRODUCTOS_ACTUALIZADOS
• Posteriormente generamos un Trigger lo denominaremos
ACTUALIZA_PRODUCTOS_BU
Finalmente realizaremos la actualización de un producto para el ejercicio tomaremos el código Articulo AR07
Finalmente realizar la consulta de la tabla auditora para confirmar la actualización del producto y la
fecha y usuario quien realizo el proceso

Ejercicio: Genere Trigger para realizar eliminación de producto indicando fecha y usuario quien genero el
proceso después de la accion

También podría gustarte