Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Procedimiento Almacenado
Procedimiento Almacenado
En el proceso de desarrollo de investigacin y ejecucin del laboratorio se usara como recursos el gestor de
base de datos SQL Server 2008, el tiempo recomendado para el desarrollo del laboratorio es de 10 minutos
por laboratorio y el tiempo que ud requiera para asimilar bien la teora. Dicho punto es fundamental para
poder proseguir con los ejercicios, lea atentamente cada indicacin y teora, no intente avanzar a otro punto
sin antes haber asimilado el punto anterior.
Con respecto a los recursos financieros y el gasto que implica desarrollar el laboratorio solo ser de que Ud.
cuente con la licencia necesaria para ejecutar el SQL Sever
Conocimientos previos requeridos:
Manejo de Transact SQL para la implementacin de consultas estructuradas
Manejo y conocimientos del gestor de base de datos SQL Server
1.
INTRODUCCION
Desde que el hombre comenz a utilizar medios digitales para almacenar su informacin
comenz a enfrentarse con problemas para hacer mas prctico este proceso, es lgico pensar
que desde la utilizacin de los archivos ( que son los antecesores de las bases de datos ) se
les fueron integrando algunas mejoras hasta llegar a la concepcin que actualmente se
tienen de base de datos, al paso del tiempo las empresas de la industria de software en
especial la relacionada con las bases de datos incorporaron mecanismos como los
mencionados en el seccin 2.2 hasta llegar paulatinamente a incorporar, los procedimientos
almacenados.
Los procedimientos almacenados no son nuevos en la industria de las bases de datos, como referencia
se tiene a ORACLE, que present PL/SQL 2, su implementacin de un lenguaje procedimental para SQL,
esto por el ao de 1991, SYBASE, PROSTGRESSQL Y DB2 estn entre los otros DBMS que en breve
siguieron
este
tan
socorrido
lenguaje
procedimental
para
sentencias
SQL.
A la publicacin de este documento es MYSQL el ms reciente poseedor de procedimientos
almacenados, esto invita a algunos expertos en la materia a mencionar que con esta incorporacin este
DBMS ha llegado a su mayora de edad, aunque sin aventurarse a mencionar que pudiera ser una
competencia seria para los grandes en esta rama como lo son ORACLE Y SQLSERVER.
Cubrir las diferentes necesidades de los usuarios de un DBMS debe de ser la filosofa a seguir de la
industria de las bases de datos y este comentario es seguro que no pas desapercibido por los
desarrolladores ya que la totalidad de las bases de datos estn haciendo o hicieron esfuerzos por
incorporar los procedimientos almacenados a su software. Y se menciona de esta manera porque en
realidad en estos tiempos en los que gran parte de la informacin del mundo se encuentra alojada en
BD esto fue una necesidad, como lo pueden corroborar los captulos que continan.
La tendencia de las bases de datos actualmente va encaminada a darle ms conocimiento a las bases
de datos que a la aplicacin, esto quiere decir que el cliente est enterado lo menos posible de la
estructura lgica de la DB, o al menos esto muestra la clara incorporacin de algunos elementos como
la integridad referencial, actualizacin y eliminacin en cascada, disparadores, UDFS y ahora
procedimientos almacenados, los cuales realizan labores que antes eran propias de las aplicaciones
cliente.
Los procedimientos almacenados son una herramienta que todo desarrollador debe tener en cuenta
siempre, ya que proporcionan un rendimiento en trminos de velocidad e incrementan la seguridad en
su sistema de base de datos, es por ello que su empleo en los diferentes proyectos incrementa la
calidad del desarrollo de software. Ahora se muestra la definicin de un procedimiento almacenado.
Un procedimiento almacenado es un conjunto de comandos SQL que pueden almacenarse en el
servidor y se ejecutan en l cuando un usuario con permisos para ello lo solicite
2. OBJETIVOS
Aprender y usar procedimientos almacenados para tareas comunes en sistemas
Gestionar correctamente procedimientos almacenados
3. MARCO CONCEPTUAL
3.1) Que son procedimientos almacenados?
Un procedimiento es un subprograma que ejecuta una accin especfica y que no devuelve ningn
valor. Un procedimiento tiene un nombre, un conjunto de parmetros (opcional) y un bloque de
cdigo.
La sintaxis de un procedimiento almacenado es la siguiente:
CREATE OR REPLACE
PROCEDURE Actualiza_Saldo(cuenta NUMBER,
new_saldo NUMBER)
IS
-- Declaracion de variables locales
BEGIN
-- Sentencias
UPDATE SALDOS_CUENTAS
SET SALDO = new_saldo,
FX_ACTUALIZACION = SYSDATE
WHERE CO_CUENTA = cuenta;
END Actualiza_Saldo;
Tambin podemos asignar un valor por defecto a los parmetros, utilizando la clausula DEFAULT
o el operador de asigancin (:=) .
CREATE OR REPLACE
PROCEDURE Actualiza_Saldo(cuenta NUMBER,
new_saldo NUMBER DEFAULT 10 )
IS
-- Declaracion de variables locales
BEGIN
-- Sentencias
UPDATE SALDOS_CUENTAS
SET SALDO = new_saldo,
FX_ACTUALIZACION = SYSDATE
WHERE CO_CUENTA = cuenta;
END Actualiza_Saldo;
Una vez creado y compilado el procedimiento almacenado podemos ejecutarlo. Si el sistema nos
indica que el procedimiento se ha creado con errores de compilacin podemos ver estos errores de
compilacin con la orden SHOW ERRORS en SQL *Plus.
Existen dos formas de pasar argumentos a un procedimiento almacenado a la hora de ejecutarlo
(en realidad es vlido para cualquier subprograma). Estas son:
Notacin posicional: Se pasan los valores de los parmetros en el mismo orden en que el procedure
los define.
BEGIN
Actualiza_Saldo(200501,2500);
COMMIT;
END;
Notacin nominal: Se pasan los valores en cualquier orden nombrando explicitamente el
parmetro.
BEGIN
Actualiza_Saldo(cuenta => 200501,new_saldo => 2500);
COMMIT;
END;
3.2) Propsito y ventajas de los procedimientos almacenados
Los procedimientos almacenados proporcionan ventajas de performance, un marco de trabajo,
y mayores capacidades de seguridad. La mejora en el rendimiento se logra a travs de un
almacenamiento local (en la base de datos), cdigo precompilado, y manejo de
cachs (almacenamientos temporarios). El marco de programacin se logra a travs de
construcciones comunes de programacin tales como parmetros de entrada/salida y
reutilizacin de los procedimientos. Las capacidades de seguridad incluye encriptacin y
Usan un programa externo, compilado como un DLL para expandir las capacidades de un
procedimiento almacenado. La mayora de los procedimientos almacenados extendidos usan el
prefijo xp_ como un convencin de nombre. Sin embargo, hay algunos procedimientos
almacenados extendidos que comienzan con el prefijo sp_, y hay algunos procedimientos
almacenados del sistema que no son procedimientos extendidos y usan el prefijo xp_. Por lo
tanto, no se puede depender sobre convencin de nombres para identificar procedimientos
almacenados del sistema y procedimientos almacenados extendidos.
3.4) Tipos de procedimientos almacenados
a.
--Operacion.
--Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables.
SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0)
SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + '
= ' + CAST(@Resultado AS VARCHAR)
@Resultado FLOAT,
@Operacion NVARCHAR(25)
--Operacion.
--Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las
variables.
SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0)
SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS
VARCHAR) + ' = ' + CAST(@Resultado AS VARCHAR)
c.
--Operacion.
--Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables.
SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0)
SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + '
= ' + CAST(@Resultado AS VARCHAR)
Al finalizar el cdigo usamos: exec ejemplo01 el cual indicara que el procedimiento a sido realizado
correctamente
Lab 1.1 Ahora crearemos y ejecutaremos un nuevo Procedimiento usando parmetros: Usando
tabla Empleado
Para modificar un procedimiento almacenado despus haber sido creado se usa la sentencia:
ALTER PROCEDURE [nombre del procedimiento]
BEGIN
[Consulta SQL]
END
Los procedimientos almacenados tambin pueden ser usados para eliminar datos desde la BD,
antes veremos la cantidad de registro que existe en la tabla empleado como por ejemplo:
Dando un visto a Todos Los registros antes de poder eliminar lo que queremos.
2. Podriamos haberlo creado de la siguiente manera. Esto es mas que nada para saber si se
ingresa o No un valor.
Ejecutamos el Procedimiento
Ahora si no por x motivos no ingresamos un valor pues nos mostrara un mensaje as:
Los procedimientos almacenados tambin pueden ser usados para solicitar datos
desde la BD como por ejemplo:
create procedure sucursal_deempleado
@cod nvarchar (4)=null,
@sucursal nvarchar(50) output
As
--- verificamos que se nos de un valor no nulo
if (@cod is null)
begin
print 'debe ingresar codigo de empleado'
return 1
end
--- verificamos que el codigo exista entre los empleados
if not exists(select 1 from Empleado as e where
e.chr_emplcodigo=@cod)
begin
print 'No existe este codigo en el registro de empleados'
return 2
end
--- realizamos la consulta
set @sucursal= (select s.vch_sucunombre+ ','+ s.vch_sucudireccion +
' ' + s.vch_sucuciudad from Sucursal as s inner join Asignado as
a on s.chr_sucucodigo=a.chr_sucucodigo inner join Empleado as e
on e.chr_emplcodigo=a.chr_emplcodigo where e.chr_emplcodigo=@cod)
return 0
go
-----------------Hasta aqui el procedimienteto
---Ahora lo ejecutamos
--- DECLARAMOS UNAS CUANTAS VARIABLES QUE NOS AYUDEN
declare @rtn nvarchar(4),@sucursal nvarchar(50)
--LE DAMOS EL CODIGO del empleado QUE QUEREMOS BUSCAR SU SUCURSAL A
LA
--VARIABLE RTN
set @rtn='0001'
--AL EJECUTAR INDICAMOS (POR MEDIO DEL ORDEN ORDENADECUADO)
--QUE VARIABLE VALOR DIIJIMOS A QUE PARAMETRO INCLUYENDO
--LA VARIABLE QUE USAREMOS PARA MOSTRAR EL RESULTADO
--QUE VARIABLE VALOR DIIJIMOS A QUE PARAMETRO INCLUYENDO
--LA VARIABLE QUE USAREMOS PARA MOSTRAR EL RESULTADO
execute
--el
end,[codigo]=@cod
6) CONCLUSIONES
Con los laboratorios antes realizados ,se ha podido notar la manera de encapsular sentencias SQL para
operaciones frecuentes en sistemas de informacin y su utilidad que ello conlleva.
Si bien en estos laboratorios no se ha podido mostrar una comparativa con respecto a tiempos de ejecucin,
pues con esta clase de consultas y la cantidad de datos los tiempos de respuestas son cortos. Se deja en
claro que si adecuamos esto al tiempo y frecuencia de uso de dichas sentencias, adems del trfico y
cantidad de usuarios, usar un procedimiento almacenado resulta en un cdigo ms limpio, rapidez y eficacia
en resultados
Esto es especialmente til cuando es imposible mediante una sentencia SQL el rescatar toda la informacin
que el usuario requiere, como por ejemplo en una factura del servicio telefnico que est sujeta a
promociones, tipos de cliente, tipos de llamadas, localidades, horarios pico y no pico etc, para lo cual es
necesario consultar varias tablas. La factura del recibo telefnico puede llegar a su realizacin mediante dos
diferentes caminos, el caso A, en el cual la aplicacin cliente solicitara al DBMS cada consulta que considere
necesaria para formar la factura o el caso B en el que en el DBMS se almacenara la rutina para que se
ejecutarn todas las sentencias SQL necesarias y enviara como respuesta una estructura de informacin en
la cual la aplicacin cliente tendra todas los datos necesarios para imprimir dicha factura.
Es necesario realizar una diferencia en el uso de los procedimientos almacenados y las UDF (funciones
definidas por el usuario) ya que los dos actan de manera muy parecida, esta diferencia consiste en que los
procedimientos almacenados aceptan una entrada mltiple y mltiples parmetros de salida, mientras que
una UDF al igual que el procedimiento acepta una entrada mltiple pero solamente un nico valor de salida,
son fciles de diferenciar ya que las UDF son compiladas en el servidor y se incrustan principalmente en
sentencias SQL similares a sum(),count() etc.. Mientras que los procedimientos no es necesario compilarlos,
y se utilizan sobretodo sentencias SQL.
Los estndares se hacen presentes en este tema, y es lgico, ya que con ellos se logra la unificacin,
convencionalidad y posibilidad de utilizacin de diferentes bases de datos con las mismas sentencias SQL al
menos en los procedimientos almacenados, los DBMS mas robustos como ORACLE, SQL SERVER y MYSQL se
encuentran regidos bajo el estndar SQL:2003, aunque con algunas excepciones cada uno de ellos.
7) REFERENCIAS
1.
2.
3.
http://www.wikilearning.com/monografia/procedimientos_almacenados_mysql_5/25854-5
http://sanchez-soft.blogspot.com/2006/11/sql-crear-un-procedimiento-almacenado.html
http://www.sqlmax.com/centro/ModuloIV_1.asp?MX=