Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Procedimientos Almacenados PDF
Procedimientos Almacenados PDF
Los procedimientos almacenados son mdulos o rutinas que encapsulan cdigo para su
reutilizacin. Un procedimiento almacenado puede incluir parmetros de entrada, devolver
resultados tabulares o escalares y mensajes para el cliente, invocar instrucciones de
lenguaje de definicin de datos (DDL) e instrucciones de lenguaje de manipulacin de
datos (DML), as como devolver parmetros de salida. En SQL Server 2008 existen dos
tipos de procedimientos almacenados: Transact-SQL o CLR.
Transact-SQL
Puede crear el procedimiento una vez y llamarlo desde el programa tantas veces como
desee. As, puede mejorar el mantenimiento de la aplicacin y permitir que las aplicaciones
tengan acceso a la base de datos de manera uniforme.
Constituyen cdigo con nombre que permite el enlace diferido.
Una operacin que necesite centenares de lneas de cdigo Transact-SQL puede realizarse
mediante una sola instruccin que ejecute el cdigo en un procedimiento, en vez de enviar
cientos de lneas de cdigo por la red.
Entre las reglas para disear procedimientos almacenados se incluyen las siguientes:
La propia definicin de CREATE PROCEDURE puede incluir cualquier nmero y
tipo de instrucciones SQL, excepto las indicadas a continuacin. No pueden
utilizarse en ninguna parte de un procedimiento almacenado.
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 nmero mximo de parmetros en un procedimiento almacenado es de 2100.
El nmero mximo de variables locales en un procedimiento almacenado est
limitado nicamente por la memoria disponible.
En funcin de la memoria disponible, el tamao mximo de un procedimiento
almacenado es de 128 megabytes (MB).
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 <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]
<procedure_option> ::=
[ 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 automticamente 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 cdigo de la aplicacin 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 instruccin DROP
PROCEDURE.
@ parameter
VARYING
Especifica el conjunto de resultados admitido como parmetro de salida. Este parmetro lo
crea de forma dinmica el procedimiento y su contenido puede variar. Solo se aplica a los
parmetros de tipo cursor. Esta opcin no es vlida para los procedimientos CLR.
default
Valor predeterminado de un parmetro. Si se define un valor predeterminado para un
parmetro, el procedimiento se puede ejecutar sin especificar ningn valor para ese
parmetro. El valor predeterminado debe ser una constante o puede ser NULL. El valor
constante puede tener el formato de un carcter comodn, lo que permite usar la palabra
clave LIKE cuando se pase el parmetro al procedimiento. Vea el ejemplo C ms adelante.
Los valores predeterminados solo se registran en la columna sys.parameters.default de los
procedimientos CLR. Esa columna ser NULL para los parmetros de procedimientos
Transact-SQL.
OUT | OUTPUT
Indica que se trata de un parmetro de salida. Use los parmetros OUTPUT para devolver
valores al autor de la llamada del procedimiento. Los parmetros text, ntext e image no se
pueden usar como parmetros OUTPUT, a menos que se trate de un procedimiento CLR.
Un parmetro de salida puede ser un marcador de posicin de cursor, a menos que el
procedimiento sea un procedimiento CLR. Un tipo de datos con valores de tabla no se
puede especificar como parmetro OUTPUT de un procedimiento.
READONLY
Indica que el parmetro no se puede actualizar ni modificar en el cuerpo del procedimiento.
Si el tipo de parmetro es un tipo con valores de tabla, se debe especificar READONLY.
RECOMPILE
Indica que Motor de base de datos no almacena en cach ningn plan de consulta para este
procedimiento, forzndolo a ser compilado cada vez que se ejecute. Para obtener ms
informacin sobre las razones para forzar una nueva compilacin, vea Volver a compilar
procedimientos almacenados. Esta opcin 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
definicin de la consulta. Para obtener ms informacin, vea Sugerencias de consulta
(Transact-SQL).
ENCRYPTION
Indica que SQL Server convertir el texto original de la instruccin CREATE
PROCEDURE en un formato confuso. La salida de la ofuscacin no se ve directamente en
ninguna de las vistas de catlogo 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 travs del puerto DAC o directamente a los
archivos de base de datos. Adems, los usuarios que puedan adjuntar un depurador al
proceso del servidor pueden recuperar el
procedimiento descifrado de la memoria en tiempo de ejecucin. Para obtener ms
informacin acerca del acceso a los metadatos del sistema, vea Configuracin de visibilidad
de los metadatos.
Esta opcin no es vlida para los procedimientos CLR.
Los procedimientos creados mediante esta opcin no se pueden publicar como parte de la
replicacin de SQL Server.
EXECUTE AS
FOR REPLICATION
Especifica que el procedimiento se crea para replicacin. Por consiguiente, no se puede
ejecutar en el suscriptor. Se usa un procedimiento creado con la opcin FOR
REPLICATION como filtro de procedimiento y solo se ejecuta durante la replicacin. No
se pueden declarar los parmetros si se especifica FOR REPLICATION. No se puede
especificar FOR REPLICATION en los procedimientos CLR. La opcin RECOMPILE se
ignora en el caso de procedimientos creados con FOR REPLICATION.
Parmetros
@ retval
Es un valor devuelto.
@ param1
Es un parmetro de entrada.
@ param2
Es un parmetro de entrada/salida.
Usos
Son usados para mejorar la administracin de la Base de datos, sin necesidad de contar con
que el usuario ejecute la sentencia de SQL. Adems, pueden generar valores de columnas,
previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. Permite
implementar programas basados en paradigma lgico (sistemas expertos, deduccin).
Componentes principales
La estructura bsica de un trigger es:
Efectos y caractersticas
Ejemplo
Un sencillo ejemplo (para SQL Server) sera crear un Trigger para insertar un pedido de
algn producto cuando la cantidad de ste, en nuestro almacn, sea inferior a un valor dado.
Disparadores en MySQL
Los disparadores son soportados en MySQL a partir de la versin 5.0.2. Algunos de los
soportes existentes son los disparadores para las sentencias INSERT, UPDATE y DELETE
El estndar 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, podra
escribirse un disparador como:
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 carcter tal como |, la cual asigna la funcin del punto y coma
(;) a otro carcter permitiendo que el disparador sea escrito usando los punto y comas sin
que se ejecute mientras se escribe; despus de escrito el disparador se escribe nuevamente
la sentencia DELIMITER ; para asignar al punto y coma su funcin 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.
Trigger DML.
Los trigger DML se ejecutan cuando un usuario intenta modificar datos mediante un evento
de lenguaje de manipulacin 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.
Trigger DDL
Los trigger DDL se ejecutan en respuesta a una variedad de eventos de lenguaje de
definicin 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 <trigger_name, sysname, table_alter_drop_safety>
ON DATABASE
FOR <data_definition_statements, , DROP_TABLE, ALTER_TABLE>
AS
BEGIN
...
END
Limitaciones de los triggers. - Solo se pueden aplicar a una tabla especfica, es decir, un
trigger no sirve para dos o ms 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 ms idneo, para impedir que una instruccin de asignacin devuelva un
resultado se puede utilizar la sentencia SET NOCOUNT al principio del Trigger. - Las
siguientes instrucciones no se pueden utilizar en los triggers :