Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesion 06a
Jony Espinoza
Procedimientos almacenados
Un procedimiento almacenado es un conjunto de sentencias SQL y de control de flujo Beneficios:
Simplifican la ejecucin de tareas repetitivas Corren ms rpido que las mismas instrucciones ejecutadas en forma interactiva Reducen el trfico a travs de la red Pueden capturar errores antes que ellos puedan entrar a la base de datos Establece consistencia porque ejecuta las tareas de la misma forma Permite el desarrollo modular de aplicaciones Ayuda a proveer seguridad Puede forzar reglas y defaults complejos de los negocios
Triggers
Son procedimientos definidos por el usuario que se ejecutan automticamente cuando se modifica un dato en una tabla
Procedimientos extendidos
Procedimientos que hacen llamadas al sistema operativo y ejecutan tareas a ese nivel
Variables
Los procedimientos almacenados pueden crear y usar variables locales Las variables slo existen mientras exista el procedimiento Las variables no las puede usar otro proceso Ejemplo: create proc proc_update_under_half_titles as declare @max_sales int, @half_max real select @max_sales = max(total_sales) from titles select @half_max = @max_sales / 2 select title, total_sales from titles where total_sales < @half_max update titles set price = price * $0.95 where total_sales < @half_max return
Variable: Zona de memoria reservada por el programa que tiene un identificador y que almacena un tipo de dato.
Parmetros de entrada
Los parmetros se usan para intercambiar datos entre los procedimientos almacenados y la aplicacin o la herramienta que llam al procedimiento almacenado: Los parmetros de entrada permiten a quien realiza la llamada pasar un valor de datos al procedimiento almacenado. Un Parmetro de entrada es una variable local para que un procedimiento almacenado pueda recibir un valor de la sentencia exec. Cuando se ejecuta un procedimiento almacenado, los parmetros de entrada pueden tener establecido su valor a una constante o usar el valor de una variable. Los parmetros de salida y los cdigos de retorno deben devolver sus valores en una variable. Los parmetros y los cdigos de retorno pueden intercambiar valores de datos con las variables de Transact-SQL o con variables de aplicacin Todos los parmetros de un procedimiento pueden recibir valores de entrada cuando el procedimiento almacenado es ejecutado por un programa que lo llama.
Use
Pasar parmetros
Dos mtodos para pasar valores a parmetros:
Paso de parmetros por posicin Paso de parmetros por nombre
Parmetros de entrada
Crear un procedimiento almacenado que tenga un parmetro de entrada:
create proc proc_hello_param (@name varchar(30)) (@ as print "Hello %1!", @name return
Ejecutar el procedimiento con y sin un valor para el parmetro de entrada. Una sentencia fallar:
exec proc_hello_param exec proc_hello_param Jony Espinoza
Crear un procedimiento almacenado que tiene un valor por default para un parmetro de entrada:
create proc proc_hello_def Quien seas) (@name varchar(30) = Quien quiera que seas) as print "Hello %1!", @name return
Parmetros de entrada
Ejecutar el procedimiento con y sin un valor para el parmetro de entrada:
exec proc_hello_def exec proc_hello_def Jony Espinoza
Cul procedimiento almacenado parece ser ms amigable? Borrar los objetos de bases de datos creados:
drop proc proc_hello_param, proc_hello_def
Los valores que retornan los parmetros se pasan automticamente al conjunto respuesta El retorno de valores se pueden pasar por nombre o por posicin
Se recomienda el paso por nombre
sp_recompile
sp_recompile hace que cada procedimiento almacenado (y trigger) que utilice la tabla indicada se recompile la siguiente vez que l se ejecute Sintaxis: sp_recompile table_name Ejemplo:
sp_recompile authors
Finalizar transacciones
Puede finalizar las transacciones con la instruccin COMMIT o la instruccin ROLLBACK. COMMIT Si una transaccin es correcta, confrmela. La instruccin COMMIT garantiza que todas las modificaciones de la transaccin se convierten en una parte permanente de la base de datos. La instruccin COMMIT tambin libera recursos que utiliza la transaccin como, por ejemplo, los bloqueos. ROLLBACK Si se produce un error en una transaccin o el usuario decide cancelar la transaccin, deshaga la transaccin. La instruccin ROLLBACK deshace todas las modificaciones realizadas en la transaccin al devolver los datos al estado en que estaban al inicio de la transaccin. La instruccin ROLLBACK tambin libera los recursos que mantiene la transaccin.
CREATE PROCEDURE BuscarProveedorPais @Pais varchar(40) AS SELECT Nombre, Ciudad, Telefono, Codigo_Postal FROM Proveedor WHERE Pais = @Pais If @@RowCount = 0 Begin PRINT 'No existe proveedores en este Pas' RETURN -1 /*Devolver cdigo de estado */ End RETURN 0
CREATE PROC BuscarEmpleado @CodEmp int = 0 -- Valor inicial ser CERO AS IF Exists ( SELECT cod_empleado FROM empleado WHERE cod_empleado = @CodEmp) Begin SELECT [Apellidos y Nombres] = Apellidos + ', ' + Nombres , Telefono = Tfno_Particular, Edad = Year(GetDate()) - Year(Fecha_Nacimiento) , Obs = CASE WHEN Year(GetDate()) - Year(Fecha_Nacimiento)<40 THEN 'Empleado Joven' WHEN Year(GetDate()) - Year(Fecha_Nacimiento)<50 THEN 'Empleado Adulto' ELSE 'Empleado a punto de Jubilarse' END FROM Empleado WHERE cod_empleado = @CodEmp End ELSE Begin PRINT 'No existe el empleado con el codigo indicado..:'+Str(@CodEmp) RETURN -1 /*Devolver codigo de estado */ End RETURN 0 EXEC BuscarEmpleado 15