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.
Los Procedimientos Almacenados de Microsoft SQL Server Son Similares A Los Procedimientos de Otros Lenguajes de Programación en El Sentido de Que Pueden