PROCEDIMIENTOS ALMACENADOS. Transact-SQL

PROCEDIMIENTOS ALMACENADOS Los procedimientos almacenados son módulos o rutinas que encapsulan código para su reutilización. Un procedimiento almacena

1 downloads 235 Views 412KB Size

Recommend Stories


Procedimientos Almacenados
• Procedimientos Almacenados • CREATE PROC[EDURE] • [ • {@parámetro tipoDatos} [= predeterminado] [OUTPUT] • ] • [,...n] • [WITH • { • RECOMPILE •

PROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOS • • Un procedimiento almacenado es un conjunto de sentencias SQL y de control de flujo Procedimientos almacenados definido

Procedimientos almacenados
Procedimientos almacenados Vimos que SQL Server ofrece dos alternativas para asegurar la integridad de datos, la integridad: 1) DECLARATIVA, mediante

Implementación de procedimientos almacenados
Implementación de procedimientos almacenados Introducción  Introducción a los procedimientos almacenados  Creación, ejecución, modificación y

GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL
GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL Conceptos, historia y contexto http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html L

PARTE II. PROGRAMAS ALMACENADOS
Lenguaje Sql con MySQL avanzado Parte II. Programas almacenados PARTE II. PROGRAMAS ALMACENADOS Tema 2. Programas almacenados en MySQL 2.1. 2.2. 2.3

Procedimientos
Publicidad. Presupuestos. Programas

Story Transcript

PROCEDIMIENTOS ALMACENADOS Los procedimientos almacenados son módulos o rutinas que encapsulan código para su reutilización. Un procedimiento almacenado puede incluir parámetros de entrada, devolver resultados tabulares o escalares y mensajes para el cliente, invocar instrucciones de lenguaje de definición de datos (DDL) e instrucciones de lenguaje de manipulación de datos (DML), así como devolver parámetros de salida. En SQL Server 2008 existen dos tipos de procedimientos almacenados: Transact-SQL o CLR.

Transact-SQL Un procedimiento almacenado Transact-SQL es una colección guardada de instrucciones Transact-SQL que puede tomar y devolver los parámetros proporcionados por el usuario. Por ejemplo, un procedimiento almacenado puede contener las instrucciones necesarias para insertar una nueva fila en una o más tablas según la información suministrada por la aplicación cliente o es posible que el procedimiento almacenado devuelva datos de la base de datos a la aplicación cliente. Los procedimientos almacenados de MicrosoftSQL Server son similares a los procedimientos de otros lenguajes de programación en el sentido de que pueden:  Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al lote o al procedimiento que realiza la llamada.  Contener instrucciones de programación que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos.  Devolver un valor de estado a un lote o a un procedimiento que realiza una llamada para indicar si la operación se ha realizado correctamente o se han producido errores (y el motivo de éstos). Puede utilizar la instrucción EXECUTE de Transact-SQL para ejecutar un procedimiento almacenado. Los procedimientos almacenados difieren de las funciones en que no devuelven valores en lugar de sus nombres ni pueden utilizarse directamente en una expresión. Utilizar procedimientos almacenados en SQL Server en vez de programas Transact-SQL almacenados localmente en equipos cliente presenta las siguientes ventajas:  Se registran en el servidor.  Pueden incluir atributos de seguridad (como permisos) y cadenas de propiedad; además se les pueden asociar certificados.

Los usuarios pueden disponer de permiso para ejecutar un procedimiento almacenado sin necesidad de contar con permisos directos en los objetos a los que se hace referencia en el procedimiento.  Mejoran la seguridad de la aplicación.  Permiten una programación modular. Puede crear el procedimiento una vez y llamarlo desde el programa tantas veces como desee. Así, puede mejorar el mantenimiento de la aplicación y permitir que las aplicaciones tengan acceso a la base de datos de manera uniforme.  Constituyen código con nombre que permite el enlace diferido. Esto proporciona un nivel de direccionamiento indirecto que facilita la evolución del código.  Pueden reducir el tráfico de red. Una operación que necesite centenares de líneas de código Transact-SQL puede realizarse mediante una sola instrucción que ejecute el código en un procedimiento, en vez de enviar cientos de líneas de código por la red. Entre las reglas para diseñar procedimientos almacenados se incluyen las siguientes:  La propia definición de CREATE PROCEDURE puede incluir cualquier número y tipo de instrucciones SQL, excepto las indicadas a continuación. No pueden utilizarse en ninguna parte de un procedimiento almacenado. CREATE AGGREGATE CREATE DEFAULT CREATE o ALTER FUNCTION CREATE o ALTER PROCEDURE SET PARSEONLY SET SHOWPLAN_TEXT USE database_name

CREATE RULE CREATE SCHEMA CREATE o ALTER TRIGGER CREATE o ALTER VIEW SET SHOWPLAN_ALL SET SHOWPLAN_XML

Puede crear otros objetos de base de datos dentro de un procedimiento almacenado. Puede hacer referencia a un objeto creado en el mismo procedimiento almacenado, siempre que se haya creado antes de hacer referencia a él.  Puede hacer referencia a tablas temporales dentro de un procedimiento almacenado.  Si crea una tabla temporal local dentro de un procedimiento almacenado, ésta existirá únicamente para los fines del procedimiento y desaparecerá cuando éste finalice.  Si ejecuta un procedimiento almacenado que llama a otro procedimiento almacenado, este último puede tener acceso a todos los objetos creados por el primero, incluidas las tablas temporales.

   

Si ejecuta un procedimiento almacenado remoto que realiza cambios en una instancia remota de MicrosoftSQL Server, los cambios no se pueden revertir. Los procedimientos almacenados remotos no intervienen en las transacciones. El número máximo de parámetros en un procedimiento almacenado es de 2100. El número máximo de variables locales en un procedimiento almacenado está limitado únicamente por la memoria disponible. En función de la memoria disponible, el tamaño máximo de un procedimiento almacenado es de 128 megabytes (MB).

CREATE PROCEDURE (Transact-SQL) Crea un procedimiento almacenado Transact-SQL o Common Language Runtime (CLR) en SQL Server 2008 R2. Los procedimientos almacenados son similares a los procedimientos de otros lenguajes de programación en tanto que pueden:  Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al lote o al procedimiento que realiza la llamada.  Contener instrucciones de programación que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos.  Devolver un valor de estado a un lote o a un procedimiento que realice una llamada para indicar si la operación se ha realizado correctamente o se han producido errores, y el motivo de estos.

Sintaxis Transact-SQL --Transact-SQL Stored Procedure Syntax CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ;number ] [ { @parameter [ type_schema_name. ] data_type } [ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY] ] [ ,...n ]

[ WITH [ ,...n ] ] [ FOR REPLICATION ] AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] } [;] ::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE AS Clause ] Transact-SQL --CLR Stored Procedure Syntax CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ;number ] [ { @parameter [ type_schema_name. ] data_type } [ = default ] [ OUT | OUTPUT ] [READONLY] ] [ ,...n ] [ WITH EXECUTE AS Clause ] AS { EXTERNAL NAME assembly_name.class_name.method_name }

[;]

Argumentos schema_name } El nombre del esquema al que pertenece el procedimiento. Los procedimientos se enlazan a un esquema. Si no se especifica el nombre del esquema cuando se crea el procedimiento, se asigna automáticamente el esquema predeterminado del usuario que crea este procedimiento. procedure_name El nombre del procedimiento. Los nombres de los procedimientos deben cumplir las reglas de los identificadores y deben ser exclusivos en el esquema. Evite el uso del prefijo sp_ cuando asigne nombre a los procedimientos. SQL Server usa este prefijo para designar los procedimientos del sistema. Si usa el prefijo, puede provoca la ruptura del código de la aplicación si existe un procedimiento del sistema con el mismo nombre. ; number Entero opcional que se usa para agrupar procedimientos con el mismo nombre. Estos procedimientos agrupados se pueden quitar juntos mediante una instrucción DROP PROCEDURE. @ parameter Parámetro declarado en el procedimiento. Especifique un nombre de parámetro con una arroba (@) como el primer carácter. El nombre del parámetro se debe ajustar a las reglas de los identificadores. Los parámetros son locales respecto al procedimiento; los mismos nombres de parámetro se pueden usar en otros procedimientos.

Se pueden declarar uno o varios parámetros; el valor máximo es 2.100. El usuario debe proporcionar el valor de cada parámetro declarado cuando se llame al procedimiento, a menos que se haya definido un valor predeterminado para el parámetro o se haya establecido en el mismo valor que el de otro parámetro. Si un procedimiento contiene parámetros con valores de tabla y el parámetro no está en la llamada, se pasa una tabla vacía. Los parámetros solo pueden ocupar el lugar de expresiones constantes; no se pueden usar en lugar de nombres de tabla, nombres de columna o nombres de otros objetos de base de datos. No se pueden declarar los parámetros si se especifica FOR REPLICATION. [ type_schema_name. ] data_type El tipo de datos del parámetro y el esquema al que pertenece el tipo de datos.

VARYING Especifica el conjunto de resultados admitido como parámetro de salida. Este parámetro lo crea de forma dinámica el procedimiento y su contenido puede variar. Solo se aplica a los parámetros de tipo cursor. Esta opción no es válida para los procedimientos CLR. default Valor predeterminado de un parámetro. Si se define un valor predeterminado para un parámetro, el procedimiento se puede ejecutar sin especificar ningún valor para ese parámetro. El valor predeterminado debe ser una constante o puede ser NULL. El valor

constante puede tener el formato de un carácter comodín, lo que permite usar la palabra clave LIKE cuando se pase el parámetro al procedimiento. Vea el ejemplo C más adelante. Los valores predeterminados solo se registran en la columna sys.parameters.default de los procedimientos CLR. Esa columna será NULL para los parámetros de procedimientos Transact-SQL.

OUT | OUTPUT Indica que se trata de un parámetro de salida. Use los parámetros OUTPUT para devolver valores al autor de la llamada del procedimiento. Los parámetros text, ntext e image no se pueden usar como parámetros OUTPUT, a menos que se trate de un procedimiento CLR. Un parámetro de salida puede ser un marcador de posición de cursor, a menos que el procedimiento sea un procedimiento CLR. Un tipo de datos con valores de tabla no se puede especificar como parámetro OUTPUT de un procedimiento.

READONLY Indica que el parámetro no se puede actualizar ni modificar en el cuerpo del procedimiento. Si el tipo de parámetro es un tipo con valores de tabla, se debe especificar READONLY.

RECOMPILE Indica que Motor de base de datos no almacena en caché ningún plan de consulta para este procedimiento, forzándolo a ser compilado cada vez que se ejecute. Para obtener más información sobre las razones para forzar una nueva compilación, vea Volver a compilar procedimientos almacenados. Esta opción no se puede usar cuando se especifica FOR REPLICATION ni para procedimientos CLR. Para indicar a Motor de base de datos que descarte planes de consulta para consultas individuales en un procedimiento, use la sugerencia de consulta RECOMPILE en la definición de la consulta. Para obtener más información, vea Sugerencias de consulta (Transact-SQL).

ENCRYPTION Indica que SQL Server convertirá el texto original de la instrucción CREATE PROCEDURE en un formato confuso. La salida de la ofuscación no se ve directamente en ninguna de las vistas de catálogo de SQL Server. Los usuarios que no dispongan de acceso a las tablas del sistema o a los archivos de base de datos no pueden recuperar el texto confuso. Sin embargo, estará disponible para los usuarios con privilegios que puedan obtener acceso a las tablas del sistema a través del puerto DAC o directamente a los archivos de base de datos. Además, los usuarios que puedan adjuntar un depurador al proceso del servidor pueden recuperar el

procedimiento descifrado de la memoria en tiempo de ejecución. Para obtener más información acerca del acceso a los metadatos del sistema, vea Configuración de visibilidad de los metadatos. Esta opción no es válida para los procedimientos CLR. Los procedimientos creados mediante esta opción no se pueden publicar como parte de la replicación de SQL Server.

EXECUTE AS Especifica el contexto de seguridad en el que se ejecuta el procedimiento. Para obtener más información, vea EXECUTE AS (cláusula de Transact-SQL).

FOR REPLICATION Especifica que el procedimiento se crea para replicación. Por consiguiente, no se puede ejecutar en el suscriptor. Se usa un procedimiento creado con la opción FOR REPLICATION como filtro de procedimiento y solo se ejecuta durante la replicación. No se pueden declarar los parámetros si se especifica FOR REPLICATION. No se puede especificar FOR REPLICATION en los procedimientos CLR. La opción RECOMPILE se ignora en el caso de procedimientos creados con FOR REPLICATION. Un procedimiento FOR REPLICATION tendrá un tipo de objeto RF en sys.objects y sys.procedures. { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] } Una o más instrucciones Transact-SQL que comprenden el cuerpo del procedimiento. Puede usar las palabras clave BEGIN y END opcionales para incluir las instrucciones. Para obtener información, vea las secciones Prácticas recomendadas, Comentarios generales, así como Limitaciones y restricciones que aparecen más adelante. EXTERNAL NAME assembly_name.class_name.method_name Especifica el método de un ensamblado de .NET Framework para que un procedimiento almacenado CLR haga referencia a él. El parámetro class_name debe ser un identificador válido de SQL Server y debe existir como clase en el ensamblado. Si la clase tiene un nombre completo de espacio de nombres que utiliza un punto (.) para separar las partes del espacio de nombres, el nombre de la clase debe delimitarse mediante paréntesis ([]) o comillas (""). El método especificado debe ser un método estático de la clase.

De manera predeterminada, SQL Server no puede ejecutar código CLR. Se pueden crear, modificar y quitar objetos de bases de datos que hagan referencia a módulos de Common Language Runtime; sin embargo, estas referencias no se pueden ejecutar en SQL Server hasta que se habilite la opción clr enabled. Para habilitar esta opción, use sp_configure. La ejecución de un procedimiento almacenado extendido tiene estas características:  La función de procedimiento almacenado extendido se ejecuta en el contexto de seguridad de MicrosoftSQL Server.

 

La función de procedimiento almacenado extendido se ejecuta en el espacio de procesos de SQL Server. El subproceso asociado a la ejecución del procedimiento almacenado extendido es el mismo que se utiliza para la conexión de cliente.

El procedimiento almacenado extendido se puede ejecutar desde Transact-SQL como un procedimiento almacenado utilizando la instrucción EXECUTE: EXECUTE @retval = xp_extendedProcName @param1, @param2 OUTPUT

Parámetros @ retval Es un valor devuelto. @ param1 Es un parámetro de entrada. @ param2 Es un parámetro de entrada/salida.

TRIGGER, DISPARADOR O DESENCADENADOR Un trigger (o disparador) en una Base de datos , es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Dependiendo de la base de datos, los triggers pueden ser de inserción (INSERT), actualización (UPDATE) o borrado (DELETE). Algunas bases de datos pueden ejecutar triggers al crear, borrar o editar usuarios, tablas, bases de datos u otros objetos.

Usos Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con que el usuario ejecute la sentencia de SQL. Además, pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. Permite implementar programas basados en paradigma lógico (sistemas expertos, deducción).

Componentes principales La estructura básica de un trigger es:   

Llamada de activación: es la sentencia que permite "disparar" el código a ejecutar. Restricción: es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de tipo nulidad. Acción a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales.

Tipos Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:  

Row Triggers (o Disparadores de fila): son aquellas que se ejecutaran n-veces si se llama n-veces desde la tabla asociada al trigger Statement Triggers (o Disparadores de secuencia): son aquellos que sin importar la cantidad de veces que se cumpla con la condición, su ejecución es única.

Pueden ser de sesión y almacenados; pero no son de fiar.

Efectos y características  



No aceptan parámetros o argumentos (pero podrían almacenar los datos afectados en tablas temporales) No pueden ejecutar las operaciones COMMIT o ROLLBACK por que estas son parte de la sentencia SQL del disparador (únicamente a través de transacciones autónomas) Pueden causar errores de mutaciones en las tablas, si se han escrito de manera deficiente.

Ejemplo Un sencillo ejemplo (para SQL Server) sería crear un Trigger para insertar un pedido de algún producto cuando la cantidad de éste, en nuestro almacén, sea inferior a un valor dado. BEFORE UPDATE ON tabla_almacen FOR ALL records IF :NEW.producto < 100 THEN INSERT INTO tabla_pedidos(producto) VALUES ('1000'); END IF; SELECT DBO.POLVE.TEST END

Disparadores en MySQL Los disparadores son soportados en MySQL a partir de la versión 5.0.2. Algunos de los soportes existentes son los disparadores para las sentencias INSERT, UPDATE y DELETE El estándar SQL:2003 requiere que los disparadores den a los programadores acceso a las variables de un registro utilizando una sintaxis como REFERENCING NEW AS n. Por ejemplo, si un disparador está monitoreando los cambios en la columna salario, podría escribirse un disparador como: CREATE TRIGGER ver_salario BEFORE UPDATE ON empleados REFERENCING NEW ROW AS n, OLD ROW AS o

FOR EACH ROW IF n.salario o.salario THEN END IF;

Como en MySQL las sentencias se ejecutan luego de escribir el signo punto y coma (;), cabe destacar que para crear un disparador en MySQL, antes se escribe la sentencia DELIMITER seguida de un carácter tal como |, la cual asigna la función del punto y coma (;) a otro carácter permitiendo que el disparador sea escrito usando los punto y comas sin que se ejecute mientras se escribe; después de escrito el disparador se escribe nuevamente la sentencia DELIMITER ; para asignar al punto y coma su función habitual.

Disparadores en PostgresQL Desde 1997 PostgresQL soporta el uso de disparadores, estos pueden anexarse a las tablas pero no a las vistas; aunque a las vistas se les pueden crear reglas. Al igual que en MySQL los disparadores de PostgresQL se pueden activar luego de sentencias INSERT, UPDATE o DELETE Cuando hay varios disparadores, se activan en orden alfabético. Además de permitir el uso de funciones en el lenguaje nativo de PostgresQL, PL/PgSQL, los disparadores también permiten invocar funciones escritas en otros lenguajes como PL/Perl. En Postgres un disparador ejecuta una función la cual contiene el código de lo que se requiere, esto difiere del método expuesto anteriormente para MySQL que escribe el código a ejecutarse dentro del mismo disparador. El siguiente es un ejemplo de disparador creado con su respectiva función: CREATE OR REPLACE FUNCTION actualizar() RETURNS TRIGGER AS $ejemplo$ BEGIN NEW.nombre := NEW.nombres || ' ' || NEW.apellidos ; RETURN NEW; END; $ejemplo$ LANGUAGE plpgsql; CREATE TRIGGER ejemplo BEFORE INSERT OR UPDATE ON tabla FOR EACH ROW EXECUTE PROCEDURE actualizar();

Trigger DML. Los trigger DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. La sintaxis general de un trigger es la siguiente. CREATE TRIGGER ON

AFTER AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for trigger here END La primera tabla (inserted) solo está disponible en las operaciones INSERT y UPDATE y en ella están los valores resultantes después de la inserción o actualización. Es decir, los datos insertados. Inserted estará vacía en una operación DELETE.

En la segunda (deleted), disponible en las operaciones UPDATE y DELETE, están los valores anteriores a la ejecución de la actualización o borrado. Es decir, los datos que serán borrados. Deleted estará vacía en una operación INSERT.

Trigger DDL Los trigger DDL se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. La sintaxis general de un trigger es la siguiente. CREATE TRIGGER ON DATABASE FOR AS BEGIN ... END Limitaciones de los triggers. - Solo se pueden aplicar a una tabla específica, es decir, un trigger no sirve para dos o más tablas - El trigger se crea en la base de datos que de trabajo pero desde un trigger puedes hacer referencia a otras bases de datos. - Un Trigger devuelve resultados al programa que lo desencadena de la misma forma que un Stored Procedure aunque no es lo más idóneo, para impedir que una instrucción de asignación devuelva un resultado se puede utilizar la sentencia SET NOCOUNT al principio del Trigger. - Las siguientes instrucciones no se pueden utilizar en los triggers : ALTER DATABASE CREATE DATABASE DISK INIT DISK RESIZE DROP DATABASE LOAD DATABASE LOAD LOG RECONFIGURE RESTORE DATABASE RESTORE LOG

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.