Sei sulla pagina 1di 8

CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 1 / 8

Lenguaje de Programacin II 1 Prof: Julio C. Lin R.


PROCEDIMIENTOS ALMACENADOS
Los procedimientos almacenados son una coleccin precompilada de instrucciones SQL o una
referencia a un mtodo Common Language Runtime (CLR) de Microsoft .NET Framework
que puede recopilar y devolver parmetros proporcionados p or el usuario, tambin se le
considera como un conjunto de instrucciones de control de flujo opcionales almacenadas bajo
un solo nombre y procesadas como una unidad. Los procedimientos almacenados se guardan
en una base de datos; se pueden ejecutar desde u na aplicacin y permiten variables
declaradas por el usuario, ejecucin condicional y otras funciones eficaces de programacin.
Los procedimientos se pueden crear para uso permanente o para uso temporal en una sesin,
un procedimiento local temporal, o par a su uso temporal en todas las sesiones, un
procedimiento temporal global.
En resumen los procedimientos almacenados pueden contener flujo de programas, lgica y
consultas a la base de datos. Pueden aceptar parmetros, proporcionar resultados de
parmetros, devolver conjuntos de resultados individuales o mltiples y devolver valores.
Se pueden utilizar procedimientos almacenados para cualquier finalidad que requiera la
utilizacin de instrucciones SQL, con estas ventajas:
Se puede ejecutar una serie de instrucciones SQL en un nico procedimiento
almacenado.
El procedimiento almacenado se compila en el servidor cuando se crea; por tanto, se
ejecuta con mayor rapidez que las instrucciones SQL individuales.
El procesamiento de un procedimiento alma cenado conlleva crearlo y ejecutarlo la primera vez,
lo que coloca su plan de consultas en la cach de procedimientos. La cach de procedimientos
es un bloque de memoria que contiene los planes de ejecucin de todas las instrucciones de
Transact-SQL que se estn ejecutando actualmente. El tamao de la cach de procedimientos
Flucta dinmicamente de acuerdo con los grados de actividad. La cach de procedimientos se
encuentra en el bloque de memoria que es la unidad principal de memoria de SQL Server.
Contiene la mayor parte de las estructuras de datos que usan memoria en SQL Server.
CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 2 / 8
Lenguaje de Programacin II 2 Prof: Julio C. Lin R.
Creacin
Cuando se crea un procedimiento almacenado, las instrucciones que hay en l se analizan
para ver si son correctas desde el punto de vista sintctico.
A continuacin, SQL Server almacena el nombre del procedimiento almacenado en la tabla del
sistema sysobjects y su texto en la tabla del sistema syscomments en la base de datos
activa. Si se detecta un error de sintaxis, se devuelve un error y no se crea el procedimie nto
almacenado.
Resolucin diferida de nombres
Un proceso denominado resolucin diferida de nombres permite a los procedimientos
almacenados hacer referencia a objetos que no existen todava cuando ste se crea. Este
proceso ofrece flexibilidad porque los procedimientos almacenados y los objetos a los que
hacen referencia no tienen que ser creados en ningn orden en particular. Los objetos deben
existir en el momento en el que se ejecuta el procedimiento almacenado. La resolucin diferida
de nombres se lleva a cabo en el momento de ejecutar el procedimiento almacenado.
Ejecucin (por primera vez o recompilacin)
La primera vez que se ejecuta un procedimiento almacenado o si el procedimiento almacenado
se debe volver a compilar, el procesador de consu ltas lo lee en un proceso llamado
resolucin.
Ciertos cambios en una base de datos pueden hacer que un plan de ejecucin sea ineficaz o
deje de ser vlido. SQL Server detecta estos cambios y vuelve a compilarlo automticamente
cuando se produce alguna de las situaciones siguientes:
Se realiza algn cambio estructural en una tabla o vista a la que hace referencia la
consulta (ALTER TABLE y ALTER VIEW).
Se generan nuevas estadsticas de distribucin, bien de forma explcita a partir de una
instruccin, como en UPDATE STATISTICS, o automticamente.
Se quita un ndice usado por el plan de ejecucin.
Se realizan cambios importantes en las claves (la instruccin INSERT o DELETE) de
una tabla a la que hace referencia una consulta.
Optimizacin
Cuando un procedimiento almacenado pasa correctamente la etapa de resolucin, el
optimizador de consultas de SQL Server analiza las instrucciones de Transact -SQL del
procedimiento almacenado y crea un plan que contiene el mtodo ms rpido para obtener
acceso a los datos. Para ello, el optimizador de consultas tiene en cuenta lo siguiente:
La cantidad de datos de las tablas.
La presencia y naturaleza de los ndices de las tablas, y la distribucin de los datos en
las columnas indizadas.
Los operadores de comparacin y los valores de comparacin que se usan en las
condiciones de la clusula WHERE.
La presencia de combinaciones y las clusulas UNION, GROUP BY u ORDER BY.
Compilacin
La compilacin hace referencia al proceso consistente en analizar el procedimiento
almacenado y crear un plan de ejecucin que se encuentra en la cach de procedimientos. La
cach de procedimientos contiene los planes de ejecucin de los procedimientos almacenados
ms importantes. Entre los factores que aumentan el valor de un plan se incluyen los
siguientes:
Tiempo requerido para volver a compilar (costo de compilacin alto)
Frecuencia de uso
CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 3 / 8
Lenguaje de Programacin II 3 Prof: Julio C. Lin R.
CREAR UN PROCEDIMIENTO ALMACENADO
Puede crear procedimientos almacenados mediante la instruccin CREATE PROCEDURE de
Transact-SQL.
Cuando cree un procedimiento almacenado, deber especificar lo siguiente:
Todos los parmetros de entrada y de salida del lote o del procedimiento que realiza la
llamada.
Las instrucciones de programacin que realicen operaciones en la base de datos,
incluidas las llamadas a otros procedimientos.
El valor de estado devuelto al lote o al procedimiento que realiza la llamada, a fin de
indicar que la operacin se ha realizado correctamente o que se ha producido un error
(y el motivo del mismo).
CREATE PROCEDURE
Crea un procedimiento almacenado, que es una coleccin guardada de instrucciones Transact -
SQL que puede tomar y devolver los parmetros proporcionados por el usuario.
SINTAXIS
CREATE PROC [ EDURE ] nombre_procedimiento [ ; numero ]
[ { @parametro tipo_de_dato} [ = default ] [ OUTPUT | OUT ] ]
[ WITH ENCRYPTION | RECOMPILE |
EXECUTE AS { CALLER | SELF | OWNER | NomUsuario }
AS
Sentencias_sql
[ RETURN ]
CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 4 / 8
Lenguaje de Programacin II 4 Prof: Julio C. Lin R.
EJEMPLOS:
A. UTILIZAR UN PROCEDIMIENTO SENCILLO CON UNA INSTRUCCIN
SELECT COMPLEJA
Este procedimiento almacenado devuelve todos los autores (nombre y apellidos), los ttulos y
los publicadores a partir de una combinacin de cuatro tablas. Este procedimiento almacenado
no utiliza ningn parmetro.
u5L pubs
go
lI LXl515 {5LLLC1 hame IkOM sys.sysobecfs
WhLkL hame = `usp1hfoa11aufoes` AND fype = `I`}
DkOI IkOCLDukL usp1hfoa11aufoes
GO
-- 1as 11heas ahfe1oes soh paa cec1oahos que ho ex1sfa e1
-- poced1m1ehfo ceado
CkLA1L IkOCLDukL usp1hfoa11aufoes
A5
5LLLC1 au1hame, aufhame, f1f1e, pubhame
IkOM aufhos a lNNLk JOlN f1f1eaufho fa
ON a.au1d = fa.au1d lNNLk JOlN f1f1es f
ON f.f1f1e1d = fa.f1f1e1d lNNLk JOlN pub11shes p
ON f.pub1d = p.pub1d
GO
-- L1 poced1m1ehfo a1macehado usp1hfoa11aufoes 11sfa 1a
-- 1hfomac1h de 1os f1fu1os, hombe pub11cado {ed1fo1a1} de cada
-- aufo y se puede eecufa de esfas fomas:
LXLCu1L usp1hfoa11aufoes
--O
LXLC usp1hfoa11aufoes
B. UTILIZAR UN PROCEDIMIENTO SENCILLO CON PARMETROS
Este procedimiento almacenado devuelve slo los autores especificados (nombre y apellidos),
los ttulos y los publicadores a partir de una combinacin de cuatro tablas. Este procedimiento
almacenado acepta coincidenci as exactas de los parmetros enviados.
CkLA1L IkOCLDukL 1hfoaufo
01asfhame vacha{40},
0f1sfhame vacha{20}
Wl1h LXLCu1L A5 CALLLk
A5
5LLLC1 au1hame, aufhame, f1f1e, pubhame
IkOM aufhos a lNNLk JOlN f1f1eaufho fa
ON a.au1d = fa.au1d lNNLk JOlN f1f1es f
ON f.f1f1e1d = fa.f1f1e1d lNNLk JOlN pub11shes p
ON f.pub1d = p.pub1d
WhLkL aufhame = 0f1sfhame
AND au1hame = 01asfhame
GO
-- L1 poced1m1ehfo a1macehado 1hfoaufo se puede
-- eecufa de esfas fomas:
LXLCu1L 1hfoaufo `Geeh`, `Mao1e`
-- O
LXLCu1L 1hfoaufo 0f1sfhame = `Geeh`, 01asfhame = `Mao1e`
-- O
LXLC au1hfo 01asfhame = `Du11`, 0f1sfhame = `Ahh`
CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 5 / 8
Lenguaje de Programacin II 5 Prof: Julio C. Lin R.
C. UTILIZAR UN PROCEDIMIENTO SENCILLO CON PARMETROS
COMODN O PREDETERMINADOS
Este procedimiento almacenado devuelve slo los autores especificados (nombre y apellidos),
los ttulos y los publicadores a partir de una combinacin de cuatro tablas. Este patrn de
procedimiento almacenado coincide con los parmetros pasados o si stos no se proporcionan,
utiliza los valores predeterminados.
CkLA1L IkOCLDukL 1hfoaufo2
01asfhame vacha{30} = `Dx`,
0f1sfhame vacha{1} = `x`
Wl1h LXLCu1L A5 CALLLk
A5
5LLLC1 au1hame, aufhame, f1f1e, pubhame
IkOM aufhos a lNNLk JOlN f1f1eaufho fa
ON a.au1d = fa.au1d lNNLk JOlN f1f1es f
ON f.f1f1e1d = fa.f1f1e1d lNNLk JOlN pub11shes p
ON f.pub1d = p.pub1d
WhLkL aufhame LlkL 0f1sfhame
AND au1hame LlkL 01asfhame
GO
/"L1 poced1m1ehfo a1macehado 1hfoaufo2 se puede eecufa eh muchas
comb1hac1ohes. Aqu1 se muesfah s1o a1guhas:"/
-- 11sfa 1os aufoes que com1ehceh coh 1a 1efa D eh e1 ape111do y
-- cua1qu1e 1efa eh e1 hombe
LXLCu1L 1hfoaufo2
--
-- 11sfa 1os aufoes que com1ehceh so1o coh 1as 1efas "C" o "k"
-- segu1do de 1a pa1aba "as" 1uego de esfo cua1qu1e caacfe.
LXLCu1L 1hfoaufo2 `|Ck]asx`
D. UTILIZAR PARMETROS DE SALIDA (OUTPUT)
Los parmetros OUTPUT permiten a un procedimiento externo, un proceso por lotes o ms de
una instruccin Transact -SQL tener acceso a un conjunto de valores durante la ejecucin del
procedimiento. En el ejemplo siguiente, se crea un procedimiento almacenado ( suma_titulos)
que admite un parmetro opcional de entrada y un parmetro de salida.
Primero, cree el procedimiento:
CkLA1L IkOCLDukL sumaf1fu1os
01l1LL vacha{40} = `x`, 05uM mohey Ou1Iu1
Wl1h LXLCu1L A5 CALLLk
A5
5LLLC1 `Nombe de1 11fu1o` = f1f1e, Iec1o=p1ce
IkOM f1f1es WhLkL f1f1e LlkL 01l1LL
5LLLC1 05uM = 5uM{p1ce} IkOM f1f1es WhLkL f1f1e LlkL 01l1LL
GO
/"
A cohf1huac1h, se uf111za e1 paamefo Ou1Iu1 coh 1ehguae de cohfo1
de f1uo.
Nofa: La va1ab1e Ou1Iu1 debe def1h1se {dec1aase} duahfe 1a
11amada a1 poced1m1ehfo a1macehado y co1ocase eh e1 1uga
coespohd1ehfe eh e1 odeh de pos1c1oh de 1os paamefos acompaado
de 1a c1ausu1a Ou1Iu1.
"/
DLCLAkL 01O1ALCO51 mohey
LXLCu1L sumaf1fu1os `5x`, 01O1ALCO51 Ou1Iu1
CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 6 / 8
Lenguaje de Programacin II 6 Prof: Julio C. Lin R.
-- 51 e1 va1o de 1a va1ab1e 01O1ALCO51 es meho a S0 se 1mp1me uh
-- fexfo 1hd1cahdo que fodos 1os f1fu1os puedeh se adqu11dos po
-- mehos de esa cahf1dad.
lI 01O1ALCO51 < S0
8LGlN
IklN1 ` `
IklN1 `fodos esfos f1fu1os puedeh se vehd1dos po mehos de 1os
$S0.`
LND
-- caso cohfa1o se muesfa 1a 11sfa de f1fu1os cohs u
coespohd1ehfe cosfo.
LL5L
5LLLC1 cosfo=`L1 fofa1 de esfos f1fu1os es $`
+ k1klM{CA51{01O1ALCO51 A5 vacha{20}}}
go
Si cambiramos el valor de la inicial del titulo a consultar por la palabra the, el resultado seria:
y nos mostrara el mensaje que todos los ttulos pueden ser adquiridos por menos de esta
cantidad.
CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 7 / 8
Lenguaje de Programacin II 7 Prof: Julio C. Lin R.
Controlando el Contexto de Ejecucin
El contexto de ejecucin establece la identidad y la comprobacin de los permisos de un
usuario. El usuario o login que llama al modulo, como un procedimiento almacenado o UDF
(funcin definida por usuario), es el que usualmente determina el contexto de ejecucin.
Ejemplo:
Asumiendo el siguiente escenario: JUAN es dueo de la tabla Ventas.Ordenes y otorga el
permiso de SELECT solamente al usuario PATTY, el usuario PEDRO no tiene acceso a la
tabla.
Si PATTY es creadora del procedimiento almacenado ListarOrdenes, y se le concede el
permiso de EXECUTE a PEDRO sobre el procedimiento almacenado, este podr listar la tabla
por el permiso implcito de PATTY de SELECT sobre la tabla Ventas.Ordenes gracias a la
instruccin WITH EXECUTE AS.
CREACION DE PROCEDIMIENTOS ALMACENADOS Pgina: 8 / 8
Lenguaje de Programacin II 8 Prof: Julio C. Lin R.
Se puede utilizar EXECUTE AS dentro de un procedimiento almacenado o funcin definida por
usuario, excepto las de tipo tabla en lnea.
La sintaxis es la siguiente:
EXECUTE AS { CALLER | SELF | OWNER | Nombre_Usuario }
Opcin Descripcin
CALLER Se ejecuta tomando la identidad y permisos del usuario llamador. Es la opcin
predeterminada.
SELF Se ejecuta tomando la identidad del usuario que esta creando o modificando el
procedimiento almacenado o funcin. Este valor no se altera si otro usuario
toma posesin del objeto.
OWNER Se ejecuta como el usuario creador de la funcin o procedimiento. Este valor se
altera si otro usuario toma posesin del objeto.
Nom_Usuario Se ejecuta tomando la identidad del usuario especificado. Si el usuario es el
mismo que ha creado o modificado al objeto, esto es equivalente a EXECUTE
AS SELF.

Potrebbero piacerti anche