Sunteți pe pagina 1din 22

Informe de Laboratorio Implementacin de bases de datos Tema: Procedimientos Almacenados

RESUMEN El presente laboratorio consiste en indagar sobre procedimientos almacenados desde su generalidad hasta ejemplos especficos, partiendo de una base terica conceptual para afianzar los conocimientos previos que tengan los participantes La investigacin se realizara en dos partes: 1) La primera parte tratara sobre la concepcin, creacin, implementacin y seguridad de procedimientos almacenados 2) Uso prctico de los procedimientos almacenados para insertar, modificar y eliminar registros Con la presente investigacin se espera conocer y afianzar el uso de procedimientos almacenados en nuestros sistemas que contengan base de datos para hacer transacciones ms limpias en cdigo , rapidez y seguridad al ejecutarla. Para ello el equipo encargado del desarrollo del presente laboratorio est conformado por 7 personas cuyos roles se han definidos para mejor desarrollo del laboratorio. Angulo Mndez Angelo Rafael Salvador Levano Castilla Carlos Miguel Quispe Arcos Hans Donayre Chacaltana Robert Pardo Figueroa Herencia Jhonatan Carlos Daniel Pillpe Leon William Ramrez Gamboa Marlon

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

Palabras clave: Ejemplo: Bases de Datos. SQL Server 2008.

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 <procedure_name> [(<param1> [IN|OUT|IN OUT] <type>, <param2> [IN|OUT|IN OUT] <type>, ...)] IS -- Declaracion de variables locales BEGIN -- Sentencias [EXCEPTION] -- Sentencias control de excepcion END [<procedure_name>]; El uso de OR REPLACE permite sobreescribir un procedimiento existente. Si se omite, y el procedimiento existe, se producir, un error. La sintaxis es muy parecida a la de un bloque annimo, salvo porque se reemplaza la seccion DECLARE por la secuencia PROCEDURE ... IS en la especificacin del procedimiento. Debemos especificar el tipo de datos de cada parmetro. Al especificar el tipo de dato del parmetro no debemos especificar la longitud del tipo. Los parmetros pueden ser de entrada (IN), de salida (OUT) o de entrada salida (IN OUT). El valor por defecto es IN, y se toma ese valor en caso de que no especifiquemos nada.

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

limitaciones de privilegios que permiten mantener a los usuarios fuera de la vista de la estructura de la base de datos subyacente, mientras se los habilita a ejecutar procedimientos almacenados que actan sobre la base de datos. Rendimiento Cada vez que un comando Transact-SQL, o conjunto de comandos, es enviado el servidor para su procesamiento, el servidor debe determinar si el remitente tiene suficientes privilegios para ejecutar esos comandos y si los comandos son vlidos. Una vez que los permisos y la sintaxis de los comandos se han verificado, SQL Server construye un plan de ejecucin para procesar el pedido. Los procedimientos almacenados son ms eficientes en parte porque el procedimiento es almacenado en el SQL Server cuando se crea. La sintaxis de los comandos contenidos en un procedimiento almacenado se comprueba que este libre de errores antes de ser guardado. El nombre del procedimiento almacenado se almacena en la tabla SysObjects, mientras que el texto del procedimiento se guarda en la tabla SysComments. Por otro lado, invocar al procedimiento almacenado implica ejecutar un solo comando en vez de cientos de comandos que un procedimiento almacenado podra contener. La primera vez que se ejecuta el procedimiento, se crea un plan de ejecucin y se compila al procedimiento almacenado. Los procesamientos subsecuentes del procedimiento almacenado son mucho ms rpidos ya que el SQL Server no vuelve a controlar la sintaxis, ni recrea un plan de ejecucin, ni se recompila el procedimiento. Por ltimo se verifica el cach por si ya existe un plan de ejecucin para ese procedimiento antes de generar un nuevo plan de ejecucin. La relativa prdida de rendimiento producida por ubicar los planes de ejecucin de los procedimientos almacenados en el cach de procedimiento se reduce ya que los planes de ejecucin para todos los comandos SQL se guardan ahora en el cach de procedimientos. Por lo que un comando Transact-SQL tratar de utilizar un plan de ejecucin ya existente en todos casos posibles. Marco de programacin Una vez que se crea un procedimiento almacenado, puede ser llamado todas las veces que sea necesario. Esta capacidad provee modulacin y habilita la reutilizacin del cdigo. La reutilizacin del cdigo mejora el mantenimiento de la base de datos al aislar la base de datos de los cambios en las prcticas del negocio. Si las reglas de negocios cambian en una organizacin, se puede modificar a los procedimientos almacenados para cumplir con las nuevas reglas de negocio. Todas las aplicaciones que llaman a esos procedimientos almacenados cumplirn con la nuevas reglas, sin tener que ser directamente modificados. Tal y como otros lenguajes de programacin, los procedimientos almacenados pueden aceptar parmetros de ingreso, retornar parmetros de salida, producir informacin de retroalimentacin de la ejecucin en la forma de cdigos de estatus y texto descriptivo, y llamar a otros procedimientos. Por ejemplo, un procedimiento almacenado puede retornar un cdigo de estatus a un procedimiento que lo llam para que este procedimiento realice una operacin segn el cdigo recibido.

Los desarrolladores de software pueden escribir sofisticados en un lenguaje como el C++; luego, se puede utilizar un tipo especial de procedimiento almacenado, denominado procedimiento almacenado extendido, para invocar al programa desde dentro del SQL Server. Ante cualquier tarea simple, se debera escribir un procedimiento almacenado. Mientras ms genrico sea el procedimiento ms til ser para muchas bases de datos. Por ejemplo; el procedimiento almacenado sp_rename cambia el nombre de un objeto creado por el usuario, tal como una tabla, una columna o un tipo de datos definido por el usuario en la base de datos actual, pudindose aplicar a cualquier base de datos. Seguridad Otro capacidad importante de los procedimientos almacenados es que mejoran la seguridad a travs de la encriptacin y el aislamiento. Los usuarios de las bases de datos pueden tener permisos de ejecutar un procedimiento almacenado sin tenerlos para acceder directamente a los objetos de la bases de datos sobre las que opera el procedimiento almacenado. Adems un procedimiento almacenado puede ser encriptado cuando se lo crea o modifica inhabilitando a los usuarios a leer los comandos Transact-SQL contenidos en el procedimiento almacenado. Estas capacidad de seguridad permiten aislar la estructura de la base de datos del usuario de la base de datos, con la consiguiente ganancia en seguridad. 3.3) Categoras de procedimientos almacenados En la actualidad existes cinco categoras de procedimientos almacenados, entre los que podemos mencionar: Procedimientos almacenados del sistema Procedimientos almacenados locales Procedimientos almacenados temporarios Procedimientos almacenados extendidos Procedimientos almacenados remotos. o Procedimientos almacenados del sistema Son procedimientos propios del sistema que son almacenados en la base de datos master y son identificados con el prefijo sp. Entre las tareas que realizan estn la de soportar aplicaciones externas para datos de las tablas del sistema, procedimientos para la administracin de base de datos y funciones de seguridad o Procedimientos almacenados locales Son usualmente almacenados en una base de datos, diseadas por el desarrollador de base de datos para tareas comunes propias del sistema y de las necesidades del negocio, tambin se puede usar para crear tareas personalizadas en base a procedimientos del sistema o Procedimientos almacenados temporarios Son similares a los procedimientos almacenados locales pero existe solo hasta que se cierre la conexin que lo creo son almacenados en la base de datos TempDb. Hay tres tipos de procedimientos almacenados temporarios: Locales (tambin llamados privados), globales, y procedimientos almacenados en TempDB. Un procedimiento almacenado temporario local siempre comienza con #, un procedimiento almacenado temporario global siempre comienza con ##.os procedimientos almacenados temporarios creados directamente en la TempDB son diferentes a los procedimientos almacenados locales y globales en lo siguiente:

Se pueden configurar permisos para ellos. Existen an despus que la conexin que los cre se terminan No son removidos hasta que el SQL Server no sea apagado. o Procedimientos almacenados extendidos

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. Procedimiento sin parmetros. Como su nombre lo dice son procedimientos que no necesitan ningn parmetro extra para ser ejecutado Ejemplo:
CREATE PROCEDURE spSumaSinParametros AS --Declaracion de variables DECLARE @Numero1 FLOAT, @Numero2 FLOAT, @Resultado FLOAT, @Operacion NVARCHAR(25) --Asignacion de valores iniciales SET @Numero1 = 5.55 SET @Numero2 = 15

--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)

--Realizar un select con el resultado de la operacion. SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Resultado AS Resultado, @Operacion AS Operacion GO

b. Procedimiento con parmetros de entrada. Como su nombre lo dice son procedimientos que no necesitan algn parmetro extra para ser ejecutado como una variable de entrada. Ejemplo:
CREATE PROCEDURE spSumaConParametros @Numero1 FLOAT, @Numero2 FLOAT AS --Declaracion de variables DECLARE

@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)

--Realizar un select con el resultado de la operacion. SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Resultado AS Resultado, @Operacion AS Operacion GO

c.

Procedimiento con parmetros de salida. Como su nombre lo dice son procedimientos que no necesitan algn parmetro extra para ser ejecutado conocida como variable de salida donde almacenar el resultado. Ejemplo:
CREATE PROCEDURE spSumaConParametroDeSalida @Numero1 FLOAT, @Numero2 FLOAT, @Resultado FLOAT OUTPUT AS --Declaracion de variables DECLARE @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)

--Realizar un select con el resultado de la operacion. SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Operacion AS Operacion GO

4) Procedimientos a seguir para desarrollar los laboratorios Pasos a seguir: a) Leer la base terica del ejercicio , ayudarse del manual o de informacin que encuentre en intenet b) Ejecutar las demos planteadas c) Verificar que el resultado sea igual al planteado d) Verificar que se cumplan los objetivos Mejoras: Para sugerencias y mejoras de los procedimientos colgar su respuesta o publicacin en nuestro blog y/o wikispace: http://jhacs.blogspot.com http://jhacs.wikispaces.com Cdigos Fuentes y Aplicaciones: estarn a su disposicin en dicho blog. 5) LABORATORIOS Laboratorio 01 (Lab Bsico): Creando y ejecutando un procedimiento almacenado Un procedimiento es un programa el cual es almacenado fsicamente en una base de datos. Su implementacin vara de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una peticin de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y slo necesita enviar sus resultados de regreso al usuario, deshacindose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes Trabajaremos con las tablas Clientes y Empleado

En este ejemplo usaremos la base de datos: Eurekabank

Procedemos a crear un nuevo procedimiento : Usando la tabla cliente

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

Laboratorio 02: Modificando un procedimiento almacenado ya existente En la siguiente imagen se muestra un procedimiento almacenado sin parmetros.

Para modificar un procedimiento almacenado despus haber sido creado se usa la sentencia: ALTER PROCEDURE [nombre del procedimiento] BEGIN [Consulta SQL] END

Ahora mostramos un procedimiento almacenado con parmetros lo cual vamos a ensearles a modificar a continuacin. Este es el procedimiento denominado datos_clientes y pasamos como parmetros @identificador Para mostrar el cliente segn su cdigo lo cual vamos a modificar para que nos muestre todos los cliente segn el cdigo de ciudad

La sentencia que usamos anteriormente la volvemos a usar: ALTER PROCEDURE [nombre del procedimiento] [@parametros] BEGIN [Consulta SQL] END

Laboratorio 03 (Lab Intermedio): Creando un procedimiento almacenado para insertar registros Vamos a crear un procedimiento almacenado para insertar empleados. Creacin del procedimiento almacenado.

Ahora cuando queramos insertar registros en la tabla empleados simplemente ejecutamos el procedimiento con los parmetros a registrar.

Ahora verificamos el registro insertado

Laboratorio 04: Creando un procedimiento almacenado para eliminar Registro

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.

Podremos crear Procedimientos Almacenados de 2 maneras: 1. PODEMOS CREAR UN PROCEDIMIENTO ALMACENADO PARA PODER USARLO CUANTOS VECES QUERAMOS.

Ejecutamos el Procedimiento Almacenado

Damos un vistazo para saber si el registro se Elimino de la Tabla

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

Nos queda de esta manera:

Ahora si no por x motivos no ingresamos un valor pues nos mostrara un mensaje as:

Laboratorio 05: Creando un procedimiento almacenado para consultar registros

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 sucursal_deempleado @rtn,@sucursal output

--YA SE ALMACENO EL RESULTADO A LA VARIABLE @sucursal Ahora solo lo --mostramos select @sucursal as [Sucursal] Laboratorio 06 (Lab Avanzado) : Programar procedimientos almacenados con parmetros y variables Al Declarar variables es Transact SQL no hay distincion entre los nombres de las variables por MAYUSCULAS y MINUSCULAS Una variable es un valor identificado por un nombre (identificador) sobre el que podemos realizar modificaciones. En Transact SQL los identificadores de variables deben comenzar por el caracter @, es decir, el nombre de una variable debe comenzar por @. Para declarar variables en Transact SQL debemos utilizar la palabra clave declare, seguido del identificador y tipo de datos de la variable. declare @nombre varchar(50)-- declare declara una variable -- @nombre es el identificador de la -- variable de tipo varchar set @nombre = Jhonatan -- El signo = es un operador -- Jhonatan es un literal print @Nombre -- Imprime por pantalla el valor de @nombre.

-- No diferencia maysculas ni minsculas en nombre de la variable

--el

A continuacion tenemos un ejemplo de variables usadas dentro de los procedimientos almacenados --El procedimiento nos almacena un nuevo cliente --solicitamos los datos necesarios para realizar el insert into con los --paramatros y al final devolveremos el codigo que se a generado en base --a un contador que llevamos desde una table llamada contador y lo --transformaremos a char(carcter) create procedure usp_insertarcliente @vch_cliepaterno varchar(25)=null, @vch_cliematerno varchar(25)=null, @vch_clienombre varchar(30)=null, @chr_cliedni char(8)=null, @vch_clieciudad varchar(30)=null, @vch_cliedireccion varchar(50)=null, @vch_clietelefono varchar(20)=null, @vch_clieemail varchar(50)=null, @chr_cliecodigo char(5) output As --solicitamos los datos necesarios para realizar el insert into que no --deben ser nulos if (@vch_cliepaterno is null or @vch_cliematerno is null or @chr_cliedni is null or @vch_clieciudad is null or @vch_cliedireccion is null ) begin print 'debe ingresar los parametros' return 1 end --con el transaction nos aseguramos que si se eventua algun fallo al --ejecutar las sentencias todo vuelva a como estaba antes asta el punto --de transaction begin transaction --declaramos la variable @int_contitem para almcenar el contador de --clientes que se lleva en la tabla contador declare @int_contitem int update Contador set @int_contItem=int_contitem, int_contItem=@int_contitem+1 where vch_conttabla='Cliente' --si la consulta no nos devuelve resultado por algun motivo ejecutamos el --rollback que nos devuelve al punto de inicio if (@@ROWCOUNT=0) begin rollback transaction return 2 end commit transaction

--ahora crearemos el codigo de cliente que sera un char(5) donde --trendremos el numero de cliente que se genera y llenaremos los espacios -- con ceros set @chr_cliecodigo=RIGHT('00000'+CONVERT(varchar(5),@int_contitem),5) --ahora junto a los datos que obtuvimos de los parametros y el codigo que --generamos realizaremos el insert into la tabla cliente begin transaction insert into Cliente(chr_cliecodigo,vch_cliepaterno,vch_cliematerno,vch_clienomb re, chr_cliedni,vch_clieciudad,vch_cliedireccion,vch_clietelefono,vch_c lieemail) values(@chr_cliecodigo,@vch_cliepaterno,@vch_cliematerno,@vch_clien ombre, @chr_cliedni,@vch_clieciudad,@vch_cliedireccion,@vch_clietelefono,@ vch_clieemail) --si se nos presenta cualquier mensaje de error entonces anularemos la --operacin para que no quede algun posible dao en la bd de lo contrario --todo se ejecutara if(@@error<>0) begin rollback transaction return 3 end commit transaction return 0 go

As como en el ejemplo del punto 13 nos ayudaremos de variables para ejecutar de manera ms sencilla el procedimiento y mostrar los resultados
declare @rtn int,@cod char(5) declare @nom varchar(25),@pat varchar(25),@mat varchar(25),@dni char(8) ,@ciudad varchar(25), @direccion varchar(25),@telefono varchar(25),@email varchar(25) set @nom='jhon' set @pat ='par' set @mat ='her' set @dni='21585687' set @ciudad ='ica' set @direccion ='vic' set @telefono ='21552' set @email ='85@hit'

--en la variable @rtn esta ves guardaremos el return que es un valor --entero que nos indicara a que parte del procedimiento se llego mediante --los datos insertados execute @rtn=usp_insertarcliente @pat,@mat,@nom,@dni,@ciudad,@direccion,@telefono,@email,@cod output select when 0 when 1 when 2 when 3 estado =CASe @rtn then 'proceso ok' then 'no se permite nulos' then 'no c suma cliente' then 'no c ingreso demanera correcta'

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=

S-ar putea să vă placă și