Buscar en este blog

sábado, 2 de octubre de 2010

Procedimientos almacenados

Los Stored procedures o procedimientos almacenados son un conjunto de operaciones, instrucciones o como su nombre lo dice procedimientos que estan almacenados en una base de datos.

Un solo stored procedure puede contener desde una hasta varias instrucciones.


Estos se ejecutan directamente en el motor de la base de datos. La ventaja de estos, es cuando con unos parametros se ejecuta multiples operaciones, de las cuales el servidor se encargaria y a nosotros solo nos retorna los resultados finales. En estos casos en vez de nosotros hacer multiples cnosultas y transacciones al servidor generando trafico en la red, solo le mandamos los parametros necesarios y nos devuelve una respuesta final (ya sea unica o en forma de tabla).




La estructura para crear un SP (Stored procedure) es muy simple.


CREATE [PROCEDURE] [DBO].[nombre] <parametro_1 tipo_de_dato>[,<parametro_N tipo_de_dato>]
as
begin
<instrucciones>
end



Ejemplo: Suponiendo que tenemos las dos tablas "empleados" y "ventas" siguiente y queremos sacar diferentes datos como cantidades vendidas por en unidades y en pesos (por ahorita solo esas dos formas) en un solo sp, quedaria de la forma siguiente:


----table empleados----
|    cve_emp int,         |
|    nombre char(25),   |
|    app char(20),        |
|    apm char(20)        |
-----------------------

------table ventas-----
|    emp int,               |
|    fec char(8),          |
|    uds double,           |
|    monto money        |
-----------------------



-------------------------
-------PROCEDURE-------
-------------------------
create procedure dbo.consulta_empleados
@tipo char(1)
as
begin
if @tipo='1' begin
   select v.fec,e.nombre+' '+e.app+' '+e.apm, count(v.monto)
   from empleados e, ventas v
   where e.cve_emp=v.emp
   group by v.fec,e.nombre,e.app,e.apm
end else @tipo='2' begin if begin
   select v.fec,e.nombre+' '+e.app+' '+e.apm, sum(v.monto)
   from empleados e, ventas v
   where e.cve_emp=v.emp
   group by v.fec,e.nombre,e.app,e.apm
end else
   select 'OPCION NO VALIDA'
end
end




Y para ejecutarlo se puede hacer de las siguientes formas.

--Consulta las unidades que cada empleado (agrupado por fecha y empleado)
exec cnsulta_empleados "1"
--Consulta el total de valor vendido de cada empleado (agrupado por fecha y empleado)
exec cnsulta_empleados "2"

Bueno pues asi de facil es, y complicado como se lo pongan, ustedes pueden hacer que les haga unir con tablas hasta con las que era imposible con uniones en querys de SQL unicos (o que eran muy dificiles, tambien pueden crear variables de tabla que funcionan como una tabla temporal solo que estas se destruyen inmediatamente se termina de ejecutar el procedimiento almacenado, todo esto lo veremos mas adelante.

Saludos y espero les sea de utilidad esta informacion.

Leer post completo...