Guia 9 PDF
Guia 9 PDF
Objetivo Especfico
Conocer la sintaxis de un procedimiento almacenado Utilizar los procedimientos almacenados para facilitar consultas en SQL Server
Computadora con SQL Server 2008. Gua Nmero 9 Bases de ejemplo Adventure Works, Library
Materiales Equipo
El control de flujo en Transact-SQL Construccin IF..ELSE GOTO etiqueta WAITFOR Descripcin Define una decisin. Define un salto incondicional Establece un tiempo para la ejecucin de una instruccin. El tiempo puede ser un intervalo de retardo o un instante especificado de ejecucin (una hora concreta del da) Bucle bsico de SQL Acompaa al bucle WHILE y le indica finalizarlo inmediatamente. Acompaa al bucle WHILE y le indica continuar con la siguiente iteracin. Salida incondicional del procedimiento o proceso por lotes, se puede definir un nmero entero como estado devuelto y puede asignarse a cualquier variable. Utilizado en conjunto con IF..ELSE o WHILE para agrupar un conjunto de instrucciones. Implementada en la instruccin SELECT y UPDATE y permite realizar consultas y actualizaciones condicionales.
BEGIN..END CASE
PRINT Es una instruccin para imprimir un dato en la pantalla, la sintaxis es: PRINT "cadena" ; cadena puede ser tambin una variable de tipo varchar. Por ejemplo: PRINT Hola a todos RAISERROR: Es similar a PRINT, pero permite especificar un nmero de error y la severidad del mensaje. RAISERROR tambin permite que los errores se registren en el servicio de sucesos de Windows NT haciendo posible leerlos a travs del visor de sucesos de Windows NT. La sintaxis es: RAISERROR ({id_mensaje | cadena_mensaje}, severidad, estado [, argumento1 [,argumento2]]) WITH LOG. Despus de llamar a RAISERROR, la variable global @@ERROR tendr el valor de id_mensaje, si no se pasa ningn id_mensaje, asumir 5000. Procedimientos almacenados.
Base de datos I. Gua 9 3 Dos de las cuestiones ms importantes para el usuario de bases de datos son la velocidad y la eficiencia. Por ello surge una pregunta: Cmo puedo proporcionar a los usuarios la velocidad y eficiencia que necesitan y merecen? Esa herramienta diseada principalmente para optimizar la obtencin de datos, es el procedimiento almacenado. Un procedimiento almacenado es una consulta que se almacena en una base de datos en SQL Server en lugar de almacenarse en el cdigo cliente (normalmente C# o Java) en el equipo cliente. Creacin de procedimientos almacenados (Store Procedures) La instruccin general para crear procedimientos almacenados es la siguiente: CREATE PROC nombre_proc AS INSTRUCCION SQL parametros
Es necesario aclarar, que un procedimiento almacenado puede recibir parmetros de entrada y devolver parmetros de salida.
Ejemplo 1: Instruccin SQL USE AdventureWorks Select name, Color, ListPrice, SellStartDate FROM Production.Product WHERE SellStartDate > '1/1/2003' ORDER BY SellStartDate, Name Procedimiento con instruccin anterior CREATE PROCEDURE PROCE1#CARNET AS Select name, Color, ListPrice, SellStartDate FROM Production.Product WHERE SellStartDate > '1/1/2003' ORDER BY SellStartDate, Name GO Para probar el nuevo procedimiento, abra una nueva consulta de SQL Server y escriba y ejecute el cdigo siguiente. USE AdventureWorks EXEC PROCE1#CARNET
Base de datos I, Gua 9 Nota: los procedimientos almacenados los puede encontrar en la base de datos donde los trabaja, en la opcin programacin.
Ejemplo2: Utilizando parmetros de entrada: Ya conocemos la sintaxis bsica para la creacin de procedimientos que es: CREATE PROCEDURE NOMBRE AS Sentencias Ahora si queremos utilizar parmetros de entrada antes de escribir el comando AS, debemos digitar los datos que recibir el procedimiento y el tipo de dato de la siguiente manera: CREATE PROCEDURE NOMBRE @parametro1 tipo,@parametro2 tipo, AS Los parmetros tienen que llevar de prefijo el smbolo de @, as cuando se llame el procedimiento y se ingresen los parmetros, estos se almacenaran en el orden que se declararon. Digite el siguiente procedimiento: USE library CREATE PROCEDURE ingreso @apellido varchar(15), @nombre varchar(15) AS insert into member(lastname,firstname) values(@apellido,@nombre) PRINT 'eL REGISTRO SE HA INGRESADO CORRECTAMENTE' Como puede ver el procedimiento pide dos parmetros apellido y nombre del tipo varchar, cuando se llame al procedimiento deber digitarse primero el apellido y despus el nombre, porque ese es el nombre que se le ha fijado en el desarrollo del procedimiento. Para llamar este procedimiento utilice la siguiente sentencia. USE library EXEC ingreso 'Moran','Gustavo' Para comprobar que se ingreso el registro utilice la siguiente instruccin y busque el registro que acaba de ingresar con el procedimiento. Select * from member Si alguien ingresa un valor nulo
Base de datos I. Gua 9 5 EXEC ingreso '','Jose' El procedimiento lo aceptara sin enviar ningn error, entonces podemos modificar el procedimiento de la siguiente manera: ALTER PROCEDURE ingreso @apellido varchar(15), @nombre varchar(15) AS IF((@nombre='') OR (@apellido='')) BEGIN PRINT 'NO SE PUEDEN INGRESAR VALORES NULOS' RETURN END ELSE BEGIN insert into member(lastname,firstname) values(@apellido,@nombre) PRINT 'eL REGISTRO SE HA INGRESADO CORRECTAMENTE' END
Los BEGIN y END son el inicio y fin del if Y RETURN provoca la salida del procedimiento tras enviar un mensaje a la pantalla del usuario. Pruebe ingresar nuevamente EXEC ingreso '','Karla'
Reglas de procedimientos almacenados: Entre las reglas para la programacin de procedimientos almacenados, cabe citar las siguientes: La propia definicin CREATE PROCEDURE puede incluir cualquier nmero y tipo de instrucciones SQL, excepto las siguientes instrucciones CREATE, que no pueden ser utilizadas nunca dentro de un procedimiento almacenado: CREATE DEFAULT CREATE PROCEDURE CREATE RULE
Se puede crear otros objetos de base de datos dentro de un procedimiento almacenado. Puede hacer referencia a un objeto creado en el mismo procedimiento almacenado, siempre que se cree antes de que se haga referencia al objeto. Puede hacer referencia a tablas temporales dentro de un procedimiento almacenado.
Base de datos I, Gua 9 Si ejecuta un procedimiento almacenado que llama a otro procedimiento almacenado, el procedimiento al que se llama puede tener acceso a todos los objetos creados por el primer procedimiento, incluidas las tablas temporales. El nmero mximo de parmetros en un procedimiento almacenado es de 1,024. El nmero mximo de variables locales en un procedimiento almacenado est limitado nicamente por la memoria disponible.
Use de variables locales. Una variable local de Transact-SQL es un objeto que contiene un valor individual de datos de un tipo especfico Las variables locales se definen debajo de la sentencia AS y llevan el prefijo DECLARE. Create PROCEDURE ingreso2 @nombre varchar(15), @apellido varchar(15) AS Declare n varchar(4) Declare a int Ejemplo 3: Con el procedimiento anterior se verifico lo de ingresar valores nulos, ahora vamos a ver que el nombre completo del usuario (nombre y apellido) no debe repetirse en la base de datos, para ello utilizamos el siguiente cdigo. ALTER PROCEDURE ingreso @apellido varchar(15), @nombre varchar(15) AS DECLARE @nom varchar(15)-variable local DECLARE @ape varchar(15)-variable local --revisamos que las variables no sean nulas --PRIMER IF EXTERNO si las variales son diferentes de null entra al if --de lo contario sale y mande que no pueden ser valores nulos IF((@nombre<>'') AND (@apellido<>'')) BEGIN --guardamos el nombre y el apellido en las variables locales @non y @ape SELECT @nom=firstname, @ape=lastname from member where firstname=@nombre and lastname=@apellido --IF INTERNO comparamos el valor capturado en @nom y @ape y los comparamos --con los parametros de entrada IF((@nom=@nombre) AND (@ape=@apellido)) BEGIN PRINT 'EL USUARIO YA EXISTE EN LA BASE DE DATOS' RETURN
Base de datos I. Gua 9 7 END--END DEL IF INTERNO ELSE--ELSE DEL IF INTERNO BEGIN INSERT INTO member(lastname,firstname) values(@apellido,@nombre) PRINT 'EL REGISTRO SE HA INGRESADO CORRECTAMENTE' END--END DEL ELSE INTERNO END--END DEL IF EXTERNO ELSE--ELSE DEL IF EXTERNO BEGIN PRINT 'NO SE PUEDEN INGRESAR VALORES NULOS' RETURN END--END DEL ELSE EXTERNO
Procedimiento
Ejecute el siguiente Script
Bibliografa
CREATE DATABASE bodega GO use bodega Gua 1 GO CREATE TABLE PRODUCTOS ( idprod char(7) PRIMARY KEY, descripcion varchar(25), existencias int ) CREATE TABLE PEDIDOS ( idpedido char(7), idprod char(7), cantidad int FOREIGN KEY(idprod) REFERENCES PRODUCTOS(idprod) )
La tabla productos contiene informacin general de los productos y la tabla pedidos contiene la informacin del pedido que se realiza de un cierto producto.
Ejemplos de datos PRODUCTOS idprod Proc01 PEDIDOS idpedido Ped01 1. idprod Proc01 cantidad 2 descripcion existencias manzanas 10
Crear un procedimiento almacenado que ingrese los valores en la tabla PRODUCTOS, y deber verificar que el cdigo del producto no exista para poder insertarlo, en caso que el codigo del producto ya exista enviar un mensaje que diga ESTE PRODUCTO YA HA SIDO INGRESADO. Crear un procedimiento almacenado que permita realizar un pedido EN LA TABLA PEDIDOS, este procedimiento deber verificar si el cdigo del producto ingresado existe en la tabla PRODUCTO, adems si la cantidad a pedir del producto es mayor a la existencia del producto deber enviar un mensaje que diga EXISTENCIA DEL PRODUCTO INSUFICIENTE, en caso que la cantidad a pedir sea menor o igual deber modificar el valor de la existencia. Ejemplo:
2.
idprod Proc01
descripcion manzanas
existencias 10
Se realiza un pedido del producto Proc01 y se pide de cantidad 6, al terminar el procedimiento el registro de ese producto deber ser: idprod Proc01 descripcion manzanas existencias 4
edicin
Gua 4
fa
Gua
9:
PROCEDIMIENTOS
Hoja de cotejo:
ALMACENADOS
Alumno : Tema: Presentacin del programa
Alumno:
Docente:
Mquina No:Mquina No: GL:
GL: Mquina No:
9 1
Docente:
Docente:
GL: Fecha:
a
EVALUACION % CONOCIMIENTO Del 20 al 30% 1-4 Conocimie nto deficient e de los fundament os tericos 5-7 Conocimiento y explicacin incompleta de los fundamentos tericos 8-10 Conocimiento completo y explicacin clara de los fundamentos tericos Nota
ACTITUD Del 15% al 30% No tiene actitud proactiva . Actitud propositiva y con propuestas no aplicables al contenido de la gua. Tiene actitud proactiva y sus propuestas son concretas.
TOTAL
100%