Beruflich Dokumente
Kultur Dokumente
Base de Datos
Resultados
Internet
Requerimientos
BASE
DATOS
Docente:
Ing. Francisco Rodrguez
Base de Datos
Tema 9:
Procedimientos Almacenados
(Stored Procedures)
as
statements
return
Ejemplo:
Ejemplo:
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:
use database
create view
create rule
create procedure
create trigger
Parmetros de entrada
Ejemplo
AS
SELECT @NART=(SELECT COUNT(*) FROM ARTICULO)
RETURN(0)
Retorno de valores
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
Estructuras de Control
3) Estructuras de BUCLE
A) Bucles simples
Su sintaxis es:
LOOP
<Secuencia_de_rdenes>;
END LOOP;
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
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