Sie sind auf Seite 1von 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

statements

return

Ejemplo:

create proc proc_update_titles


as
update titles
set price = price * $0.95
where total_sales < 3000
return

Sintaxis simplificada para drop:


drop proc procedure_name

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

Das könnte Ihnen auch gefallen