You are on page 1of 39

UNIVERSIDAD NACIONAL DE TRUJILLO ESCUELA DE ING.

INDUSTRIAL

Base de Datos
Resultados Internet Requerimientos

BASE DATOS

Docente: Ing. Francisco Rodrguez

Base de Datos

Tema 9:

Procedimientos Almacenados (Stored Procedures)

Definiendo Procedimientos Almacenados


Un procedimiento es un programa dentro de la base de datos que ejecuta una accin o conjunto de acciones especficas. Es una coleccin de Ordenes SQL Incrementar la Performance de Tareas Repetitivas Aceptan Parmetros y Retornan Valores Retorna Valores de Estado Indicando xito o fracaso

Ventajas de los Procedimientos Almacenados


Simplificacin de la Gestin: Los Procedimientos almacenados pueden permitir que la lgica del negocio se encuentre como una API en la base de datos, que puede simplificar la gestin de datos y reducir la necesidad de codificar la lgica en el resto de los programas cliente. Seguridad: Es mucho mejor usar Stored procedure por seguridad. Los procedimientos almacenados facilitan algunas tareas de administracin de seguridad y asignacin de permisos-

Ventajas de los Procedimientos Almacenados


Centralizacin de la definicin: al formar parte de la base de datos los procedimientos almacenados estn en un lugar centralizado y pueden ser ejecutados por cualquier aplicacin que tenga acceso a la misma.
Reduccin del trfico de red: una sentencia formada por decenas, cientos o incluso miles de lneas de cdigo SQL puede escribirse como un procedimiento almacenado en el servidor y ejecutarse simplemente mediante el nombre de dicho procedimiento, en lugar de enviar todas las lneas de cdigo por la red desde el cliente hasta el servidor

Ventajas de los Procedimientos Almacenados


Ejecucin centralizada en el Servidor: La ventaja es que cuando est en accin, en respuesta a una peticin de usuario, el procedimiento almacenado corre directamente bajo el control del motor de bases de datos, generalmente en un servidor separado aumentando con ello, generalmente, la rapidez del procesamiento del requerimiento.
Encapsulamiento: como se dijo anteriormente, los procedimientos almacenados encapsulan gran parte de la lgica del negocio a las aplicaciones que los utilizan

Creacin de Stored Procedures

CREATE PROCEDURE <nombre_procedure> [@param1 <tipo>, ...] AS -- Sentencias del procedure

Creando Procedimientos Almacenados


Se crean en la BD Activa con CREATE PROCEDURE
Use library GO CREATE PROC sp_lista_books AS SELECT * FROM TEXTO WHERE due_date < GETDATE() GO

Permiten 32 niveles de anidamiento Use sp_help para visualizar su contenido

Crear y borrar procedimientos almacenados


Sintaxis simplificada para create:
create proc procedure_name

as

return

statements

Ejemplo:

create proc proc_update_titles as update titles set price = price * $0.95 where total_sales < 3000 return drop proc procedure_name

Sintaxis simplificada para drop: Ejemplo:


drop proc proc_update_titles

Ejecutando Stored Procedures

Ejecutando un Stored Procedure


EXEC sp_lista_books

Ejecutando un Stored Procedure con la orden INSERT


INSERT INTO customers EXEC employee_customer

Variables
Los procedimientos almacenados pueden crear y usar variables locales
Las variables slo existen mientras exista el procedimiento Las variables no las puede usar otro proceso

Ejemplo:

create proc proc_update_under_half_titles as declare @max_sales int, @half_max real select @max_sales = max(total_sales) from titles select @half_max = @max_sales / 2 select title, total_sales from titles where total_sales < @half_max update titles set price = price * $0.95 where total_sales < @half_max return

Sentencias vlidas e invlidas


Un procedimiento almacenado puede:
Seleccionar y modificar datos Crear tablas temporales y permanentes Llamar otros procedimientos almacenados Referenciar objetos de bases de datos

Un procedimiento almacenado no puede ejecutar:


use database create view create rule create procedure create trigger

Parmetros de entrada

An input Parmetro is a variable local to a procedimiento almacenado that can receive a value from the exec procedure Sentencia

Usando Parmetros de entrada


Se incluyen al inicio del Stored Procedure con su datatype Se pueden incluir valores por defecto
CREATE PROCEDURE SP_CONSULTA @CC VARCHAR(10) AS SELECT DESC_ART, STOCK FROM ARTICULO WHERE COD_ART=@CC

EXEC SP_CONSULTA 254

El control de flujo en Transact-SQL

Usando Parmetros de entrada

Usando Parmetros de entrada

Ejemplo

Usando Parmetros de salida

Uso de parmetros por referencia


En muchos casos se requiere obtener un parmetro de salida como resultado de la ejecucin del procedimiento. La solucin para este caso es utilizar la palabra reservada OUTPUT para los argumentos de salida.
Ejemplo Elaborar un procedimiento almacenado que reporte la cantidad de artculos registrados. CREATE PROCEDURE SP_CUENTA_ARTICULOS @NART INT OUTPUT AS

SELECT @NART=(SELECT COUNT(*) FROM ARTICULO)


RETURN(0)

Uso de parmetros por referencia


En muchos casos se requiere obtener un parmetro de salida como resultado de la ejecucin del procedimiento. La solucin para este caso es utilizar la palabra reservada OUTPUT para los argumentos de salida.
Ejecucin:
DECLARE @N INT EXEC SP_CUENTA_ARTICULOS @N OUTPUT SELECT NART=@N

Retorno de valores

A return Parmetro is a variable local to a procedimiento almacenado that can send a value to the exec procedure Sentencia

Estructuras de Control
1) Estructuras lgicas: IF THEN ELSE A) IF-THEN B) IF-THEN-ELSE C) IF-THEN-ELSIF 2) Expresiones CASE 3) Estructuras de BUCLE A) Bucles simples B) Bucles WHILE C) Bucles FOR 4) GOTO y ETIQUETAS A) Restricciones de GOTO B) Etiquetado

Estructuras de Control
A) Estructuras lgicas: IF THEN ELSE Su sintaxis es: IF <expresin_booleana> THEN Secuencia_de_rdenes; [ELSIF <expresin_booleana> THEN Secuencia_de_rdenes;] [ELSE Secuencia_de_rdenes;] END IF; Donde <expresiones_booleanas> es cualquier expresin que de cmo resultado un valor booleano. Las clusulas ELSIF y ELSE son opcionales y puede haber tantas clusulas ELSIF como se quiera.

Estructuras de Control
1) Estructuras lgicas: IF THEN ELSE A) IF THEN Si se evala la condicin y resulta verdadera, se ejecutan uno o ms lneas de cdigo de programa. En el caso de que la condicin resulte ser falsa, NO se realiza NINGUNA accin. IF fecha_nac<1-01-1970 THEN -- No termina con un ; salario:= salario *1.15; -- aumento de salario en un 15% END IF; Se pueden anidar varias instrucciones: IF fecha_nac<1-01-1970 THEN IF apellido =Martnez THEN -- IF ANIDADO salario:= salario *1.15; -- aumento de salario en un 15% END IF; -- END IF OBLIGATORIO END IF;

Estructuras de Control
1) Estructuras lgicas: IF THEN ELSE B) IF THEN ELSE Si se evala la condicin y resulta verdadera, se ejecutan uno o ms lneas de cdigo de programa. En el caso de que la condicin resulte ser falsa, se ejecutan las instrucciones que siguen a la instruccin ELSE. IF fecha_nac<1-01-1970 THEN -- No termina con un ; salario:= salario *1.15; -- aumento de salario en un 15% ELSE -- No termina con un ; salario:= salario* 1.05; -- aumento de salario en un 5% END IF; Se pueden anidar varias instrucciones IF-THEN-ELSE. Slo se permite una instruccin ELSE en cada instruccin IF .

Estructuras de Control
1) Estructuras lgicas: IF THEN ELSE C) IF THEN ELSIF Si se evala la condicin y resulta verdadera, se ejecutan uno o ms lneas de cdigo de programa. En el caso de que la condicin resulte ser falsa, se evala la condicin especificada en el ELSIF. IF apellido =Prez THEN salario:= salario *1.10; -- aumento de salario en un 10% ELSIF apellido =Martnez THEN salario:= salario *1.15; -- aumento de salario en un 15% ELSIF apellido=Alvarez THEN salario:= salario *1.20; -- aumento de salario en un 20% ELSE salario:= salario* 1.05; -- aumento de salario en un 5% END IF; -- Slo se necesita un nico END IF

Estructuras de Control
2) Expresiones CASE La instruccin CASE es una evolucin en el control lgico. Se diferencia de las estructuras IF-THEN-ELSE en que se puede utilizar una estructura simple para realizar selecciones lgicas en una lista de valores. Puede utilizarse tambin para establecer el valor de una variable. Su sintaxis es: CASE [variable] WHEN expresin1 THEN valor1; WHEN expresin2 THEN valor2; WHEN expresin3 THEN valor3; WHEN expresin4 THEN valor4; ELSE valor5; END CASE; No existe lmite para el nmero de expresiones que se pueden definir en una expresin CASE.

Estructuras de Control
EJEMPLO: DECLARE @equipo varchar(100); @ciudad varchar(50):= MADRID; BEGIN CASE ciudad WHEN MADRID THEN equipo:=RealMadrid; WHEN BARCELONA THEN equipo:=FCBarcelona; WHEN LIMA THEN equipo:= Universitario; ELSE equipo:=SIN EQUIPO; END CASE; DBMS_OUTPUT.PUT_LINE(equipo); END;

Estructuras de Control
2) Expresiones CASE Cada clusula WHEN puede tener su propia expresin a evaluar. En este caso, despus del CASE no aparece ninguna expresin.
EJEMPLO: CASE WHEN precio<11 THEN descuento:=2; WHEN precio>10 and precio<25 THEN descuento:=5; WHEN precio>24 THEN descuento:=10; ELSE descuento:=15: END CASE;

Estructuras de Control
3) Estructuras de BUCLE A) Bucles simples Su sintaxis es:
LOOP <Secuencia_de_rdenes>; END LOOP;

Este bucle sera infinito, no tiene condicin de parada. Para salir de un bucle le pondremos la orden EXIT, que su sentencia es: EXIT [WHEN <Condicin>]; Esta orden sera equivalente a: IF <Condicin> THEN EXIT; END IF;

Estructuras de Control
3) Estructuras de BUCLE A) Bucles simples EJEMPLO: DECLARE V_Contador BINARY_INTEGER:=1; BEGIN LOOP INSERT INTO Tabla (Valor) VALUES (V_Contador); V_Contador:=V_Contador +1; EXIT WHEN V_Contador =10; END LOOP; END;

Estructuras de Control
3) Estructuras de BUCLE B) Bucles WHILE Su sintaxis es: WHILE <Condicin> LOOP <Secuencia_de_rdenes>; END LOOP;
Antes de entrar en el bucle evala la condicin, si es verdadera, entrar. Si la condicin es falsa o nula el bucle se termina. Hay que tener en cuenta que si la condicin del bucle no toma el valor TRUE la primera vez que se le comprueba el bucle, no llegar nunca a ejecutarse. Pueden usarse las rdenes EXIT o EXIT WHEN dentro de un bucle WHILE para salir del bucle, sin llegar a terminar la condicin.

Estructuras de Control
3) Estructuras de BUCLE B) Bucles WHILE EJEMPLO: DECLARE V_Contador BINARY_INTEGER:=1; BEGIN WHILE Contador <11 LOOP INSERT INTO Tabla (Valor) VALUES (V_Contador); V_Contador:=V_Contador +1; END LOOP; END;

Estructuras de Control
3) Estructuras de BUCLE C) Bucles FOR

En el caso en que sepamos el nmero de iteraciones en que se ejecutarn los bucles simples y WHILE utilizaremos los bucles FOR. Su sintaxis es: FOR <contador_bucle> IN [ REVERSE ] menor . . mayor LOOP Secuencia_de_rdenes END LOOP; donde <contador_bucle> es una variable que no hace falta que se declare ya que lo hace de forma implcita como BINARY_INTEGER. Los valores menormayor muestra el rango en que se ejecutar el bucle.

Estructuras de Control
3) Estructuras de BUCLE C) Bucles FOR
EJEMPLO: BEGIN FOR V_Contador IN 1..10 LOOP INSERT INTO Tabla (Valor) VALUES (V_Contador); END LOOP; END;

Estructuras de Control
4) GOTO y etiquetas Su sintaxis es: GOTO <Etiqueta>; donde <Etiqueta> es una etiqueta definida en el bloque PL/SQL. Al evaluar una orden GOTO el control pasa inmediatamente a la orden identificada por la etiqueta, por ejemplo:

BEGIN DBMS_OUTPUT.PUT_LINE(Esto es un ejemplo.); GOTO Etiqueta_1; DBMS_OUTPUT.PUT_LINE(No hace el GOTO.); <<Etiqueta_1>> DBMS_OUTPUT.PUT_LINE(Entra en el GOTO.); END;

Estructuras de Control
4) GOTO y etiquetas
USO: P.e.: Para hacer ms legible el bloque de ejecucin con manejadores de excepciones complejos en bloques anidados. Restricciones de GOTO No se puede saltar al interior de un bloque anidado No se puede saltar al interior de un bucle No se puede saltar al interior de una orden IF Etiquetado A los bucles pueden ponrseles etiquetas de forma que las usemos en la sentencia EXIT. En el caso de que se le aada una etiqueta a un bucle habr que ponerla tambin al final del bucle.

FIN

You might also like