INF520 BD II Unidad - 2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 49

• Fundamentos de

programación en Base
UNIDAD de Datos (PL/SQL)
II

Material didáctico compilado y preparado por los Maestros:


Romery Alberto
José Amado
Julio Castro
UNIDAD 2: FUNDAMENTOS DE PROGRAMACIÓN EN BASE
DE DATOS (BD).

Contenido Temático
• 2.1. Introducción y Fundamentos del Lenguaje de programación en BD.
2.2. Actualización de datos avanzada a partir Subconsultas.
2.3. Más allá de las tablas: Gestión de objetos del Schema.
2.4. Estructuras selectivas y control de secuencia.
2.5. Estructuras repetitivas y procesamiento iterativo.
2.1. INTRODUCCIÓN Y FUNDAMENTOS DEL LENGUAJE
DE PROGRAMACIÓN EN BD.

• OBJETIVOS DEL TEMA 


• Conocer PL/SQL.
• Conocer los tipos de datos.
• Conocer las operaciones que permite.
• Conocer los bloques PLSQL.
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL

• SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales,


pero que no posee la potencia de los lenguajes de programación.
• PL/SQL amplía SQL con los elementos característicos de los lenguajes de
programación, variables, sentencias de control de flujo, bucles, ...
• Cuando se desea realizar una aplicación completa para el manejo de una base de
datos relacional, resulta necesario utilizar alguna herramienta que soporte la
capacidad de consulta del SQL y la versatilidad de los lenguajes de programación
tradicionales.
• PL/SQL es el lenguaje de programación que proporciona Oracle para extender el
SQL estándar con otro tipo de instrucciones.
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL

• Con PL/SQL vamos a poder programar las unidades de programa de la


base de datos ORACLE, están son:
• Procedimientos almacenados
• Funciones
• Triggers
• Scripts
INTRODUCCION A LA PROGRAMACION PLSQL
-FUNDAMENTOS-.

• PL/SQL no es CASE-SENSITIVE, es decir, no diferencia mayúsculas de


minúsculas aunque ORACLE sea CASE-SENSITIVE en la búsquedas de texto.
• Una línea en PL/SQL contiene grupos de caracteres conocidos como UNIDADES
LÉXICAS, que pueden ser clasificadas como:
• DELIMITADORES, IDENTIFICADORES, LITERALES, COMENTARIOS y
• EXPRESIONES

• •DELIMITADOR: Es un símbolo simple o compuesto que tiene una función


especial en PL/SQL. Estos pueden ser:
• –Operadores Aritméticos, Operadores Lógicos, Operadores Relacionales.
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL

• IDENTIFICADOR: Son empleados para nombrar objetos de programas en


PL/SQL así como a unidades dentro del mismo, estas unidades y objetos
incluyen:
• Constantes, Cursores, Variables, Subprogramas, Excepciones, Paquetes
• LITERAL: Es un valor de tipo numérico, carácter, cadena o lógico no representado por un identificador
(es un valor explícito).

• COMENTARIO: Es una aclaración que el programador incluye en el código. Son


soportados 2 estilos de comentarios, el de línea simple y de multilínea, para lo
cual son empleados ciertos caracteres especiales como son:
• -- Línea simple
• /* conjunto de líneas */
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL
-TIPOS DE DATOS-.

• Cada constante y variable tiene un tipo de dato en el cual especifica


el formato de almacenamiento, restricciones y rango de valores validos.
• PLSQL proporciona una variedad predefinida de tipos de datos. Casi
todos los tipos de datos manejados por PL/SQL son similares a los
soportados por SQL. Los más utilizados son:
• NUMBER (Numérico).
• CHAR (Carácter).
• VARCHAR2 (Carácter de longitud variable ).
• BOOLEAN (lógico).
• DATE (Fecha). Las fechas se almacenan internamente como datos numéricos, por lo que es
posible realizar operaciones aritméticas con ellas.
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL

• Atributos de tipo. Un atributo de tipo PL/SQL es un modificador que puede


ser usado para obtener información de un objeto de la base de datos. El
atributo %TYPE permite conocer el tipo de una variable, constante o campo
de la base de datos. El atributo %ROWTYPE permite obtener los tipos de
todos los campos de una tabla de la base de datos, de una vista o de un
cursor.
• PL/SQL también permite la creación de tipos personalizados (registros) y
colecciones(tablas de PL/SQL).
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL
-OPERACIONES-.

• Operador de asignación: ‘:=‘


• Operadores aritméticos: ‘+’ (suma), ‘-’ (resta), ‘*’
(multiplicación), ‘/’ (división), ‘**’ (exponente)
• Operadores relacionales o de comparación: ‘=‘
(igual a), ‘<>’ (distinto de), ‘< ‘ (menor que), ‘>’
(mayor que), ‘>=‘ (mayor o igual a), ‘<=‘ (menor o
igual a)
• Operadores lógicos: AND (y lógico), NOT
(negación), OR (o lógico)
• Operador de concatenación ‘||’
INTRODUCCIÓN Y FUNDAMENTOS DEL LENGUAJE DE
PROGRAMACIÓN EN BD.

• Un programa de PL/SQL está compuesto por bloques.


• Un programa está compuesto como mínimo de un
Bloque.
• Estructura de un Bloque:
• La sección declarativa en donde se declaran todas las
constantes y variables que se van a utilizar en la ejecución del bloque.
• La sección de ejecución que incluye las instrucciones a ejecutar en el bloque
PL/SQL.
• La sección de excepciones en donde se definen los manejadores de errores
que soportará el bloque PL/SQL.
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL

[ declare | is | as ]
/*Parte declarativa*/
begin
/*Parte de ejecucion*/
[ exception ]
/*Parte de excepciones*/
end;
INTRODUCCIÓN A LA PROGRAMACIÓN PLSQL

DECLARE
/*Parte declarativa*/
nombre_variable DATE;
BEGIN
/*Parte de ejecución /
SELECT SYSDATE INTO nombre_variable
FROM DUAL;
EXCEPTION
/*Parte de excepciones*/
WHEN OTHERS THEN
dbms_output.put_line('Se ha producido un error’);
END;
PUESTA EN MARCHA DE CÓDIGO PLSQL
FUNDAMENTOS DE PLSQL
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL

Construyendo bloques de programas PL/SQL

• PL/SQL es un lenguaje estructurado con bloques. Un bloque PL/SQL es definido por las
palabras clave DECLARE, BEGIN, EXCEPTION, y END, que dividen el bloque en tres secciones

• 1. Declarativa: sentencias que declaran variables, constantes y otros elementos de código,


que después pueden ser usados dentro del bloque
2. Ejecutable: sentencias que se lanzan cuando se ejecuta el bloque
3. Manejo de excepciones: una sección especialmente estructurada para atrapar y
manejar cualquier excepción que se produzca durante la ejecución de la sección ejecutable

• Sólo la sección ejecutable es obligatoria. No es necesario que usted declare nada en un


bloque, ni que maneje las excepciones que se puedan lanzar.
• Un bloque es en sí mismo una sentencia ejecutable, por lo que se pueden anidar los bloques
unos dentro de otros.
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL

Construyendo bloques de programas PL/SQL

• PL/SQL es una extensión procedural de SQL. Está integrado en el núcleo del RDBMS ORACLE.
Un bloque PL/SQL anónimo consta de 3 secciones
[DECLARE]
-- Definición de variables, constantes, cursores, ...
BEGIN

-- Cuerpo
[EXCEPTION]
-- Excepciones

END;
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL

Construyendo bloques de programas PL/SQL

• Ejemplo de bloque con Sección Ejecutable:


El clásico “¡Hola Mundo!” es un bloque con una sección ejecutable que llama al procedimiento
DBMS_OUTPUT.PUT_LINE para mostrar texto en pantalla:

BEGIN
DBMS_OUTPUT.put_line('¡Hola Mundo!');
END;
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL
• Ejecutando bloques PL/SQL
Una vez que hemos escrito un bloque de código PL/SQL éste se puede ejecutar. Existen muchas
herramientas para ejecutar código PL/SQL. La más básica es SQL*Plus, una interfaz de línea de
comandos para ejecutar sentencias SQL así como bloques PL/SQL. La Figura 1 muestra un ejemplo de
ejecución del más simple de los bloques de ejemplo de nuestro “¡Hola Mundo!” en SQL*Plus y en SQL
Developer
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL

Construyendo bloques de programas PL/SQL

• El siguiente bloque declara una variable de tipo VARCHAR2 (un string) con un largo máximo de
100 bytes para contener el string ‘¡Hola Mundo!’. Después, el procedimiento
DBMS_OUTPUT.PUT_LINE acepta la variable, en lugar del literal, para desplegarlo:
DECLARE
l_mensaje VARCHAR2(100) := '¡Hola Mundo!’;
BEGIN
DBMS_OUTPUT.put_line(l_mensaje);
END;
• Note que he llamado a la variable l_mensaje. Normalmente uso el prefijo l_ para variables
locales —variables definidas dentro del código de un bloque— y el prefijo g_ para variables
globales definidas en un paquete.
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL
Construyendo bloques de programas PL/SQL – (TYPE & ROWTYPE)

• El siguiente bloque declaramos 2 variables del tipo de la columna de la tabla employees, insertamos
los valores del empleado cuyo id es 138, y lo imprimimos por pantalla.
DECLARE
l_last_name employees.last_name%TYPE;
l_first_name employees.first_name%TYPE;
BEGIN
SELECT last_name, first_name
INTO l_last_name, l_first_name
FROM employees
WHERE employee_id = 138;
DBMS_OUTPUT.put_line (
'Mr. ' || l_last_name ||', '|| l_first_name);
END;
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL
Construyendo bloques de programas PL/SQL - (TYPE & ROWTYPE)

• El siguiente bloque declaramos 1 variable del tipo de todos los campos de la tabla employee, luego
insertamos todos los valores de la empleado cuyo id es 138, y lo imprimimos por pantalla.
DECLARE
l_employee employees%ROWTYPE;
BEGIN
SELECT a.*
INTO l_employee
FROM employees a
WHERE employee_id = 138;
DBMS_OUTPUT.put_line (
l_employee.last_name ||' '|| l_employee.first_name ||' '|| l_employee.phone_number ||' '||
l_employee.job_id ||' '|| l_employee.salary);
END;
PUESTA EN MARCHA DE CÓDIGO PLSQL
& FUNDAMENTOS DE PLSQL

Construyendo bloques de programas PL/SQL


• El siguiente ejemplo de bloque agrega una sección de manejo de excepciones que atrapa
cualquier excepción (WHEN OTHERS) que pueda ser lanzada y muestra el mensaje de error, que
es retornado por la función SQLERRM (provista por Oracle).

DECLARE
l_mensaje VARCHAR2(100) := '¡Hola Mundo!’;
BEGIN
DBMS_OUTPUT.put_line(l_mensaje);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line(SQLERRM);
END;
2.2. ACTUALIZACIÓN DE DATOS AVANZADA A PARTIR
SUBCONSULTAS
ACTUALIZACIÓN DE DATOS AVANZADA A PARTIR SUBCONSULTAS

En base de datos I hemos visto cómo insertar información dentro de cualquier


base de datos usando instrucciones SQL estándar. Pero como nada está escrito
en piedra, una vez que hayamos introducido la información, casi seguro
que tarde o temprano tendremos que actualizarla: un cliente cambia de
dirección, se modifica la cantidad de un pedido, un empleado cambia de
categoría... Todos estos sucesos implican actualizar información en nuestro
modelo de datos. Para ayudarnos con eso, en SQL tenemos la instrucción
UPDATE que también fue vista en la asignatura anterior.
ACTUALIZACIÓN DE DATOS AVANZADA A PARTIR SUBCONSULTAS

La instrucción UPDATE nos permite actualizar los valores de los campos de una tabla,
para uno o varios registros, o incluso para todos los registros de una tabla.
Su sintaxis general es:
UPDATE NombreTabla
SET Campo1 = Valor1, ..., CampoN = ValorN
WHERE Condición
Siendo:
• NombreTabla: el nombre de la tabla en la que vamos a actualizar los datos.
• SET: indica los campos que se van a actualizar y con qué valores lo vamos a hacer.
• WHERE: Selecciona los registros de la tabla que se van a actualizar. Se puede
aplicar todo lo visto para esta cláusula anteriormente, incluidas las sub-consultas.
ACTUALIZACIÓN DE DATOS AVANZADA A PARTIR SUBCONSULTAS

Ejemplos:
1.- Corrige el apellido del empleado con identificador 5. El correcto es
"Smith":
UPDATE Employees
SET LastName = 'Smith'
WHERE EmployeeID = 5

2.- Incrementa un 21% el precio de los productos pertenecientes la categoría


que tiene el identificador 2:
UPDATE Products
SET UnitPrice = UnitPrice + (UnitPrice * 21 / 100)
WHERE CategoryID = 2
ACTUALIZACIÓN DE DATOS AVANZADA A PARTIR SUBCONSULTAS
3.- Elimina el valor del campo observaciones (Notes) de todos los empleados:
UPDATE Employees
SET Notes = NULL

Nótese como en este caso al carecer de una cláusula WHERE que restrinja la
actualización se actualizan todos los registros.

Es muy importante incluir una cláusula WHERE en las instrucciones UPDATE salvo
en casos muy concretos como el del ejemplo anterior. De no hacerlo se
actualizarán todos los registros de la tabla como acabamos de ver. Es habitual
que, por error, se omita esta cláusula y se pierdan datos de forma
irreversible (salvo que dispongamos de copias de seguridad o tengamos la
posibilidad de hacer un ROLLBACK (cancelación de las instrucciones) si no hemos
finalizado la transacción).
ACTUALIZACIÓN DE DATOS AVANZADA A PARTIR SUBCONSULTAS
Podemos incluir una o varias subconsultas dentro una sentencia UPDATE. Éstas pueden estar contenidas en
la cláusula WHERE o formar parte también de la cláusula SET. En este último caso se deben seleccionar el
mismo número de campos y con los tipos de datos apropiados, para que cada uno de los valores pueda
ser almacenado en la columna que hay a la izquierda del signo igual “=”, entre paréntesis, al lado de la
instrucción SET.
Veamos unos ejemplos:
1.- Para todos los productos de la categoría bebidas ('beverages'), de la cual no conocemos su
identificador, duplica su precio:
UPDATE Products
SET UnitPrice = UnitPrice * 2
WHERE CategoryID = (SELECT CategoryID FROM Categories WHERE CategoryName = 'Beverages')

Noten como hemos utilizado una subconsulta en el filtro de modo que se averigua el identificador de la
categoría que nos interesa, a partir de su nombre.
2.- Asignar a todos los productos de la categoría bebidas ('beverages'), el mismo precio que tiene el
producto con número de identificador (clave primaria) igual a 5:
UPDATE Products
SET UnitPrice = (SELECT UnitPrice FROM Products WHERE ProductID = 5)
WHERE CategoryID = (SELECT CategoryID FROM Categories WHERE CategoryName = 'Beverages')
ACTUALIZACIÓN DE DATOS AVANZADA A PARTIR SUBCONSULTAS
De la misma forma podemos actualizar tablas realizando eliminación de registros mediante DELETE
siguiendo la siguiente sintaxis básica para realizar eliminaciones con subconsulta:
DELETE FROM tabla
WHERE campo OPERADOR (SUBCONSULTA);
EJEMPLO: Eliminamos todos los libros de las editoriales que tiene publicados libros de "Juan Perez":
DELETE FROM libros
WHERE codigoeditorial in
(SELECT e.codigo
FROM editoriales e
JOIN libros
ON codigoeditorial=e.codigo
WHERE autor='Juan Perez');
La subconsulta es una combinación que retorna una lista de valores que la consulta externa emplea
al seleccionar los registros para la eliminación.
2.3. MÁS ALLÁ DE LAS TABLAS: GESTIÓN DE OBJETOS
DEL SCHEMA

Un esquema es una coleccion de objetos de un SGBD. Esta coleccion esta


compuesta por tablas, vistas, indices, paquetes, funciones, disparadores,
procedimientos almacenados, tipos, secuencias, directorios, vistas
materializadas, entre otros objetos.

Cuando creamos un usuario de base de datos en ORACLE, internamente se


crea el esquema asociado a dicho usuario, por lo tanto los objetos de cada
esquema estan intrinsecamente relacionados a un usuario.
MAS ALLA DE LAS TABLAS: GESTIÓN DE OBJETOS DEL ESQUEMA.
MAS ALLA DE LAS TABLAS: GESTIÓN DE OBJETOS DEL ESQUEMA.

Esquema: Es una coleccion de objetos logicos utilizados para organizar de manera mas comprensible la
informacion.
Usuarios: Es el nombre y clave de la cuenta del esquema.

Tablas: Es una unidad logica basicamente de almancenamiento que esta compuesta por filas y columnas, y se
identifica con un nombre.

Vistas: Es una seleccion de varias columnas, regularmente de diferentes tablas. Una vista no almacena datos,
solo las presenta de forma dinamica. Se utilizan para simplificar la vision del usuario sobre un conjunto de
tablas, hacienda transparente la forma de obtencion de los datos.

Indices: Es una estructura creada para ayudar a recuperar datos de una manera mas rapida y eficiente. Un
indice se crea sobre una o varias columnas de una tabla. De manera que cuando se disponga recuperar data,
esta sea obtenida de una manera mas rapida.

Secuencias: El generador de secuencias de ORACLE se utiliza para generar numeros unicos llamados secuencias.
MAS ALLA DE LAS TABLAS: GESTIÓN DE OBJETOS DEL ESQUEMA.

• Procedimientos: Es un grupo de sentencias SQL escritas en PL/SQL, donde se implementan una serie de
rutinas con el proposito de completar una o varias tareas.

• Funciones: Es un grupo de sentencias SQL escritas en PL/SQL, donde se implementan una serie de rutinas que
devuelven un valor.

• Disparadores Triggers: Es un procedimiento que se ejecuta en forma inmediata cuando ocurre un evento
especial. Estos eventos solo pueden ser la insercion, actualizacion o eliminacion de datos de una tabla.

• Vistas Materializadas: es una vista que aparte de guardar la estructura de la seleccion, tambien guarda la
data que obtiene esta estructura realizando una carga inicial, y luego cada cierto tiempo va refrescando los
mismos.
2.4 ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA.
-ESTRUCTURAS DE CONTROL DE FLUJO-.

• Estructura condicional IF
Sentencias GOTO
IF (expresión) THEN
-- Instrucciones
ELSIF (expresión) THEN
-- Instrucciones
ELSE
-- Instrucciones
END IF;
-ESTRUCTURAS DE CONTROL DE FLUJO-

DECLARE
flag NUMBER;
BEGIN
flag :=1 ;
IF (flag = 1) THEN
GOTO paso2;
END IF;
<<paso1>>
dbms_output.put_line('Ejecución de paso 1’);
<<paso2>>
dbms_output.put_line('Ejecución de paso 2');
END;
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA
Mas abajo mostramos las estructuras selectivas, de control y repetición que ofrece Oracle para
PLSQL:
• Estructuras de control de flujo: IF & GOTO.
• BUCLES

IF (cambia el control del flujo de ejecución dependiendo de la condición).


(3)
IF <condición> THEN
(2) Instrucciones;
IF <condición> THEN ...;
Instrucciones; ELSIF <condición2> THEN
...; Instrucciones;
(1) ...;
ELSE
Instrucciones; ELSIF <condición3> THEN
IF <condición> THEN Instrucciones;
...;
Instrucciones; ...;
END IF;
...; ELSE
END IF; Instrucciones;
...;
END IF;
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

Estructuras de control de flujo: IF & GOTO

• Estructuras de control de flujo: IF EJEMPLO:

DECLARE
num1 NUMBER := &get_num;
BEGIN
IF num1 < 0 THEN
DBMS_OUTPUT.PUT_LINE ('The number '||num1||' is a
negative number');
ELSIF num1 = 0 THEN
DBMS_OUTPUT.PUT_LINE ('The number '||num1||' is equal
to zero');
ELSE
DBMS_OUTPUT.PUT_LINE ('The number '||num1||' is a
positive number');
END IF;
END;
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

GOTO (desvía el flujo de ejecución a una determinada etiqueta).

EJEMPLO 
DECLARE
flag NUMBER;
BEGIN
flag :=1 ;
IF (flag = 1) THEN
GOTO paso2;
END IF;

<<paso1>>
dbms_output.put_line('Ejecucion de paso 1');
<<paso2>>
dbms_output.put_line('Ejecucion de paso 2');
END;
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

CASE
La instrucción CASE puede evaluar múltiples expresiones y devolver para cada una de
ellas un valor/bloque de instrucciones. El resultado de cada WHEN puede ser un valor
o una sentencia, en el primer caso el resultado de una sentencia CASE se puede
guardar en una variable.
Su sintaxis:
CASE variable
WHEN expresión1 THEN valor1/bloque de instrucciones
WHEN expresión2 THEN valor2/bloque de instrucciones
WHEN expresión3 THEN valor3/bloque de instrucciones
WHEN expresión4 THEN valor4/bloque de instrucciones
ELSE valor5/bloque de instrucciones
END
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

CASE
Ejemplo: Dada la siguiente tabla de Empleados, realizar una consulta con la
sentencia CASE.

Nombre EC
SELECT Nombre, CASE EC Juan S
WHEN 'C' THEN 'Casado/a' Maria C

WHEN 'S' THEN 'Soltero/a' Ana D


Luis S
WHEN 'D' THEN 'Divorciado/a'
Santiago
ELSE 'Otros'
END AS "Estado Civil"
FROM Empleados;
2.5. ESTRUCTURAS REPETITIVAS Y PROCESAMIENTO
ITERATIVO
ESTRUCTURAS REPETITIVAS Y PROCESAMIENTO ITERATIVO.
-ESTRUCTURAS DE CONTROL DE FLUJO-

Estructuras de control de flujo

En PL/SQL tenemos a nuestra disposición los siguientes iteradores o


bucles:
•LOOP
•WHILE
•FOR

El bucle LOOP, se repite tantas veces como sea necesario hasta que se fuerza su salida con
instrucción EXIT. Su sintaxis es la siguiente

LOOP
-- Instrucciones
IF (expresion) THEN
-- Instrucciones
EXIT;
END IF;
END LOOP;
ESTRUCTURAS REPETITIVAS Y PROCESAMIENTO
ITERATIVO.
-ESTRUCTURAS DE CONTROL DE FLUJO-
• LOOP
LOOP

-- Instrucciones

IF (expresión) THEN

-- Instrucciones

EXIT;

END IF;

END LOOP;

• WHILE
WHILE (expresion)

LOOP

-- Instrucciones

END LOOP;

• FOR
FOR contador IN [REVERSE] inicio..final

LOOP

-- Instrucciones

END LOOP;
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

El bucle WHILE, se repite mientras que se cumpla expresion.

WHILE (expresion) LOOP


-- Instrucciones
END LOOP;

El bucle FOR, se repite tanta veces como le indiquemos en los identificadores inicio y final.

FOR contador IN [REVERSE] inicio..final LOOP

-- Instrucciones

END LOOP;

En el caso de especificar REVERSE el bucle se recorre en sentido inverso.


ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

EJEMPLO de LOOP 

DECLARE
a NUMBER:=1;

BEGIN
dbms_output.put_line('Program started.');

LOOP
dbms_output.put_line(to_char(a));
a:=a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END;
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

EJEMPLO de WHILE 

DECLARE

i NUMBER := 1;
i_cubed NUMBER;

BEGIN
WHILE i <= 10 LOOP
i_cubed := i**3;
DBMS_OUTPUT.PUT_LINE('Number: ' || TO_CHAR(i) || ' Cube: '
|| TO_CHAR(i_cubed));
i := i + 1;
END LOOP;

END;
ESTRUCTURAS SELECTIVAS Y CONTROL DE SECUENCIA

DECLARE
EJEMPLO de FOR  v_min number(3);
v_max number(3);
v_c number(1);

BEGIN
SELECT MIN(employee_id), MAX(employee_id) into v_min, v_max
FROM employees;

FOR i in v_min + 1 .. v_max - 1


LOOP
SELECT COUNT(*) INTO v_c
FROM employees
WHERE employee_id = i;

IF v_c = 0 THEN
dbms_output.put_line(i);
END IF;
END LOOP;
END;
•Manejo de
PROXIMO
Excepciones y
UNIDAD III Tipos de Datos

También podría gustarte