Está en la página 1de 34

DML

Transact SQL
Introducción a los
Procedimientos
almacenados
Introducción
Las tareas conjuntadas son una
herramienta con gran utilidad en cualquier
aplicación el uso de los procedimientos
almacenados permite agrupar
instrucciones y operaciones como un
programa con un solo plan de ejecución
Introducción a los
procedimientos almacenados.
Un procedimiento almacenado es un
pequeño programa almacenado en la
base de datos que puede ser ejecutado en
cualquier momento. Los procedimientos
almacenados, al igual que los
disparadores, utilizan un lenguaje
propietario ya que el estándar SQL ANSI
92 no especifica nada acerca de ellos.
Introducción a los
procedimientos almacenados.
Los procedimientos almacenados ofrecen
ventajas importantes:

 Rendimiento: al ser ejecutados por el motor de base


de datos ofrecen un rendimiento inmejorable ya que
no es necesario transportar datos a ninguna parte.
 Potencia: Permiten ejecutar operaciones complejas
en pocos pasos
 Centralización: están en un lugar centralizado y
pueden ser ejecutados por cualquier aplicación que
tenga acceso a la misma.
Introducción a los
procedimientos almacenados.
Pero también ofrecen una desventaja
importante:

 Esclavitud: los procedimientos almacenados


generan una esclavitud hacia el motor de base de
datos. Una base de datos con muchos
procedimientos almacenados es prácticamente
imposible de migrar a otro motor.
Introducción a los
procedimientos almacenados.
set term !!
create procedure proxcliente
(incremento integer)
returns (proximocliente integer) as
begin
proximocliente = gen_id(nextcust, incremento);
end;
!!
set term ; (SP. Realizado en Interbase)
Introducción a los
procedimientos almacenados.
create procedure proxcliente
@incremento int,
@proximocliente int output
as
Select @proximocliente = gen_id(nextcust,
incremento)
Return @proximocliente
GO
Introducción a los
procedimientos almacenados.
Procedimientos de Sistema y extendidos.
Microsoft a desarrollado una serie de
procedimientos almacenados para desarrollar
una serie de tareas administrativas de la base
de datos. Estos procedimientos se
encuentran dentro de la base de datos
Master, pero pueden ser usados en cualquier
base de datos.
Introducción a los
procedimientos almacenados.
Procedimientos de Sistema y extendidos.
Un ejemplo de ello es el procedimiento
sp_helptext que permite visualizar la definición
de una vista.
Los procedimientos extendidos son usados
implementados como librerías dinámicas (DLLs)
por lo general su nombre empieza con el prefijo
“ex_” por ejemplo xp_cmdshell
Introducción a los
procedimientos almacenados.
Procedimientos definidos por el usuario
Un usuario puede crear sus propios procedimientos
almacenados, mismos que pueden ser clasificados
como: Locales, Temporales o bien Remotos.
Los procedimientos locales, son aquellos donde el
usuario crea su procedimiento para uso dentro de la
base de datos en la que es creado, por lo cual se dice
que estará siempre disponible.
Introducción a los
procedimientos almacenados.
Procedimientos definidos por el usuario
Los procedimientos Temporales pueden ser
de dos tipos “Locales” y “Globales”, se
diferencian por el acceso de las sesiones, los
locales comienzan con el simbolo “#”
mientras los globales comienzan con doble
simbolo “#”, como no son procedimientos
físicos no pueden ser visualizados en el
navegador de procedimientos
Introducción a los
procedimientos almacenados.
 Procedimientos definidos por el usuario
#proc_def  Procedimiento temporal local
##proc_def  Procedimiento temporal global

Los procedimientos remotos al igual que los


locales existen para una BD. En particular pero
pueden ser mandados a ejecución con el
nombrado completo de objetos
<basededatos>.DBO.<nombre>
Introducción a los
procedimientos almacenados.
Ejecución - Primera Vez
Cuando se ejecuta por primera vez un
procedimiento almacenado el SQL Server
comienza haciendo un “parsing” al
procedimiento almacenado, después compila
el procedimiento y lo ejecuta por primera vez
Introducción a los
procedimientos almacenados.
Ejecución – Segunda Vez
Después de ejecutar por primera instancia un
procedimiento almacenado, SQL Server
almacena el plan de ejecución y lo utiliza en
el momento de ejecución, por lo cual el
trabajo es más rápido.
Creación de procedimientos
almacenados.
Sintaxis
CREATE PROCEDURE <nombre>
[WITH opción]
AS
Instrucciones SQL
GO
Creación de procedimientos
almacenados.
Por ejemplo crear un procedimiento que permita
mostrar el territorio (TerritoryDescription) y la
Región a la que pertenece (RegionDescription)
de las tablas Region y Territories de la Base de
datos Northwind

Este procedimiento contendrá dentro de él


únicamente una instrucción SELECT
Creación de procedimientos
almacenados.
Create procedure sp_terr
as
select t.TerritoryDescription, r.RegionDescription
from Territories t join Region r
on t.RegionID = r.RegionID

Compile el procedimiento (F5)


Ejecute el procedimiento <nombre>
Creación de procedimientos
almacenados.

Plan de Ejecución
Creación de procedimientos
almacenados.
Creación de procedimientos
almacenados.
Limitaciones:
 Soportan hasta 128MB de tamaño
 Se pueden anidar hasta 32 niveles de PA.
(anidar un procedimiento es cuando uno
llama a otro)
 No se pueden realizar las siguientes
operaciones: CREATE DEFAULT, CREATE
PROCEDURE, CREATE RULE, CREATE
TRIGGER, CREATE VIEW
Creación de procedimientos
almacenados.
Revisión de la definición
Para revisar desde el analizador de consultas
el contenido del procedimiento almacenado
basta con usar el procedimiento de sistema
SP_HELPTEXT <nombre>

Para la revisión de aspectos generales se


puede usar el procedimiento de sistema
SP_HELP <nombre>
Creación de procedimientos
almacenados.
Evitando ver la definición
Para evitar que cualquier usuario pueda accesar a la
definición del procedimiento almacenado, se agrega
la cláusula WITH ENCRYPTION después de
especificar el nombre.
CREATE PROCEDURE <nombre>
WITH ENCRYPTION
AS
Instrucciones SQL
GO
Creación de procedimientos
almacenados.
Practica #2
Cree un procedimiento almacenado que muestre de
la tabla Products los campos ProductID,
ProductName y UnitPrice, la definición del
procedimiento debe permanecer cifrada.
Ejecute el procedimiento
Analice el plan de ejecución
Revise que la definición no se visualice
Creación de procedimientos
almacenados.
Modificación de Procedimientos
Se puede cambiar la definición de los
procedimientos almacenados usando la
instrucción ALTER PROCEDURE, cuando se
modifica un procedimiento, realmente lo que
se lleva acabo es un borrado y una re-
creación.
Creación de procedimientos
almacenados.
 Borrando un procedimiento
Cuando se desea eliminar un procedimiento
almacenado, debe de ejecutar la instrucción
DROP PROCEDURE <nombre>

Microsoft recomienda revisar que objetos son


dependientes del procedimiento antes de
eliminarlo SP_DEPENDS <procedimiento>
Creación de procedimientos
almacenados.
Practica #3
Modifique el procedimiento del ejercicio
anterior para que además muestre la cantidad
de registros existentes en la tabla de
Products, esto a través de una consulta.
Uso de parámetros.
Parámetros de entrada
CREATE PROCEDURE <nombre>
[@nombre_parametro <tipo de dato>]
[=valor_default]
[WITH opción]
AS
Instrucciones SQL
GO
Ejemplo
Crear un procedimiento que determine si existe o
no el registro en la tabla clientes, al introducir los
valores de entrada nombre y telefono
Uso de parámetros.
Crear un procedimiento almacenado que
reciba de entrada una concordancia de
caracteres y muestre la región
(RegionDescription) de aquellas regiones
que contengan esa subcadena.
create procedure sp_tab
@name varchar(50) = null
as
select @name='%'+@name+'%'
select * from region where RegionDescription like
@name
Uso de parámetros.
La definición por default permite que no se
marque error si el procedimiento no recibe el
parámetro indicado.
Para verificar si existe valor en el parámetro
basta revisar con un IF
if @name is null
print 'No existe subcadena de comparación'
else
Begin
select @name='%'+@name+'%'
select * from region where RegionDescription like @name
End
Uso de parámetros.
Parámetros de Salida
CREATE PROCEDURE <nombre>
[@nombre_parametro <tipo de dato>] [=valor_default]
output
[WITH opción]
AS
Instrucciones SQL
GO
Ejecución anidada de procedimientos
EXEC <procedimiento>
Uso de parámetros.
 Otras capacidades
 Uso de variables (declare @<variable>
tipo_dato)
 Uso de ciclos (While <expresión_lógica> ...
begin ... end)
 Mensajes de error (RAISERROR)
 Variable de sistema (@@ERROR)
Conclusión
 Uno de los objetos más complejos de la
base de datos son los procedimientos
almacenados, su desarrollo y
comprensión requieren de tiempo y
facilidad de programación en la mayoría
de los casos, esta unidad permitió al
usuario comprender su manejo y
utilización básica de los mismos.

También podría gustarte