Sie sind auf Seite 1von 6

Ing.

Ricardo Mendoza Rivera

Implementando Stored Procedures (SP)


Los SP permiten incrementar la performance de la BD, realzan la seguridad de la BD e
incorporan tcnicas de programacin basadas en el Transact SQL. A continuacin veremos los
tipos de SP, como crearlos y ejecutarlos.

Describir el propsito y razones de usar SP.


Explicar como se procesa un SP en SQL Server.
Determinar cuando usar SP para completar tareas en SQL Server.

Definicin
Es una coleccin de ordenes Transact-SQL que van orientados a incrementar la performance
de las tareas repetitivas. Por ejemplo si desea realizar un clculo de planillas o realizar un
proceso de facturacin en Batch. Es recomendable usarlos cuando desde el cliente se van a
ejecutar ms de una instruccin SQL.
Tienen la capacidad de aceptar parmetros y de retornar valores . Por ejemplo imagine el
clculo de planillas teniendo una interfaz desde la aplicacin tal como se muestra en el
siguiente diagrama: on
r si
ve
al
tri
ne
hi
ac
fM

Tipos
Existen 5 tipos
pd

System
Local
Temporary
Remote
Extended

System SP
System SP son almacenados en la Base de Datos Master y llevan tpicamente el prefijo sp_,
pueden invocar el llamado de datos de las tablas del sistema, ejecutar tareas administrativas y
tareas de seguridad.
Ing. Ricardo Mendoza Rivera

Por ejemplo, si desea conocer la informacin del catlogo de la tabla de cliente puede ejecutar
sp_help de la siguiente manera:

Sp_help cliente

Local SP
Son comnmente los ms usados y corresponden a los Stored Procedures que vamos creando
en nuestros servidores locales.

Ventajas de las SP
Compartir lgica de aplicaciones: Un Stored Procedure puede ser invocado desde una
plataforma Window o desde el Web.

on
r si
ve
al
tri

Proporciona Mecanismos de Seguridad:


Representan cierta ventaja en la simplificacin de las tareas de seguridad, dado que slo es
necesario tener permiso de ejecucin no importando que tenga acceso a las tablas involucradas
ne

dentro del Stored Procedure.


Es una de las formas ms recomendadas para el llamado desde aplicaciones Web.
hi
ac

Incrementan la Performance:
Dado que los procesos se realizan en el servidor los tiempos de ejecucin tienden a ser
fM

mejores.
pd

Reducen el trfico de red


Dado a que la lgico de proceso se encuentra en el servidor el llamado desde la aplicacin
(cliente) a la Base de Datos (servidor) se limita al mandado de parmetros.

Creando Stored Procedures

Sixtxis:
Ing. Ricardo Mendoza Rivera

CREATE PROCEDURE <Nombre_Stored_Proc>

[ @parmetro tipo_dato [ = default ] [ OUTPUT ] ]

AS

<ordenes_SQL>

Por ejemplo: vamos a suponer que queremos conocer los clientes que nos adeudan 2
documentos pendientes de pago:

CREATE PROCEDURE spCom_VerificaCredito


@codigo CHAR(4) -- es un parmetro de entrada desde la aplicacin
AS
--- Imagine que para los clientes tipo 'A' no se produce validacin
SET NOCOUNT ON
IF (SELECT tipocliente FROM cliente WHERE cliente = @codigo) = 'A'
SELECT 0 As DocPendientes -- Esto llegara como RecordSet al cliente
on
ELSE
-- Se produce verificacin para cliente en el estado del documento si es diferente de tipo 'A'
SELECT DocPendientes = COUNT(*) -- Esto llegara como RecorsSet al cliente
r si

FROM documento WHERE cliente = @codigo AND estado = 'P'


ve

El llamado de la interfaz podra ser:


al
tri
ne
hi
ac
fM

El cdigo muestra desde Visual Basic sera:


pd

Private Sub TxtCliente_Validate(Cancel As Boolean)


Dim rs As adodb.Recordset
Dim sql As String
' Llamado del Stored Procedure
sql = " EXEC spCom_VerificaCredito @codigo='" & TxtCliente.Text & "'"
rs.Open sql, cn, adOpenForwardOnly, adLockOptimistic
' Ntese DocPendientes viene del Stored Procedure
If rs!DocPendientes > 1 Then
MsgBox "Crdito No Procede!!! Nro Doc Pendientes =" & Str(rs!DocPendientes)
Else
MsgBox "Crdito Procede!!! Nro Doc Pendientes =" & Str(rs!DocPendientes)
End If
Set rs = Nothing
End Sub
Ing. Ricardo Mendoza Rivera

Puede ejecutarlo directamente desde el Analizador de Consultas de esta forma:

Usando parmetros en Stored Procedures


Los SP tienen la capacidad de recibir parmetros y de entregar valores.

Parmetros de Entrada
Son aquellos que reciben los valores mandados desde la aplicacin, pueden incluirse valores por
defecto los mismos que entraran a trabajar en el caso no hayan definido al momento de su
on
llamado. En el caso de que hayan sido definidos como cadena, tomarn la longitud del
parmetro en el SP.
r si
ve

CREATE PROCEDURE spCom_VerificaCredito


@codigo CHAR(4) -- es un parmetro de entrada desde la aplicacin
AS -- deben ser definidos con su tipo de dato respectivo
al
tri

Formas de ejecutar un Stored Procedure desde el Analizador de Consultas:


ne

EXEC spCom_VerificaCredito 'CLI1' -- Llamado por posicin


hi


ac

EXEC spCom_VerificaCredito @codigo= 'CLI1' -- Llamado por nombre de


parmetro, recomendada
fM

Retornando Valores usando parmetros de salida:


pd

CREATE PROCEDURE Formula


@m1 smallint,
@m2 smallint,
@resultado smallint OUTPUT -- parmetro de salida
AS
SET @resultado = @m1* @m2 -- el ltimo valor de @resultado
ser es el devuelto
DECLARE @Valor smallint
EXECUTE Formula 7,5, @Valor OUTPUT --observe OUTPUT
SELECT 'Resultado = ', @Valor

Resultado = 35
Ing. Ricardo Mendoza Rivera

Manejando Cursores en un Stored Procedure

Existe necesidad de hacer recorridos secuenciales a un grupo de registros, ya sea por ejemplo
el realizar un clculo de planillas, en donde trabajador por trabajador vamos calculando los
importes de ingresos, descuentos y cuotas patronales; o de realizar un clculo de intereses a un
grupo de clientes 1 por uno. En este caso SQL Server nos ofrece la posibilidad de realizar estos
barridos secuenciales utilizando cursores.

Como se ver a continuacin el trabajo con cursores no es muy complicado, pero podra restar
tiempos de ejecucin del servidor, ya que los cculos se realizan con los recursos directos de la
memoria del servidor, por ello se recomienda trabajar con ellos cuando es necesario.

El manejo de cursores se asemeja a procesar :

Un recordset en Visual Basic , preguntando por el EOF (fin de archivo), con su bucle Do
While para procesarlo y con MoveNext avanzar al sgte registro.
Una tabla en Visual Fox, verificando el fin de archivo, con un bucle While para
procesarlo y un Skip para avanzar al sgte registro.
Recorrer un Data Window, verificando con la funcin RowCount() y con el bucle For
procesarlo directamente.

Pasos on
Declarar el cursor
si
DECLARE Nombre_Cursor CURSOR
r

FOR orden_select -- se declara a partir de una orden SELECT


ve
al

Abrir el cursor
tri

OPEN Nombre_Cursor
ne

Leer el cursor. Para leer el cursor es necesaria almacenar su informacin en variables


hi

de memoria. La cantidad de variables est en funcin al nmero de campos definidos


en el SELECT. FETCH tambin cumple la funcin de preparar el avance para el siguiente
ac

registro del cursor. Por defecto avanza al siguiente registro (NEXT)


fM

FETCH [NEXT|PRIOR|FIRST |LAST] Nombre_Cursor INTO <lista_variab_memoria>


pd

Verificar que exista informacin en el cursor

@@fetch_status = 0
-- cuando es cero significa que existe informacin por procesar en el cursor
Ing. Ricardo Mendoza Rivera

Procesar el cursor

WHILE @@fetch_status = 0
BEGIN
--- <procesar el cursor>
FETCH Nombre_Cursor INTO <lista_variab_memoria> --leer, avanzar
END

Cerrar el cursor

CLOSE Nombre_Cursor

Desactivarlo de memoria

DEALLOCATE Nombre_Cursor

Ejemplo: on
Suponga que desea mostrar el detalle de movimientos de un producto sus ingresos y sus
salidas, lo que sera el tener un Kardex del producto
r si
ve
al
tri
ne
hi
ac
fM
pd

Das könnte Ihnen auch gefallen