Está en la página 1de 8

INSTITUCIÓN UNIVERSITARIA ANTONIO JOSÉ CAMACHO

FACULTAD DE INGENIERÍA
PROGRAMA: ASIGNATURA:
GUÍA No. 1
TECNOLOGÍA EN SISTEMAS BASE DATOS 2
BLOQUES ANONIMOS - PARTE I

OBJETIVOS:

Los bloques anónimos manejados en esta guía no abordan anidamiento de bloques. Este tema
se tratará en una guía posterior.

Esta guía se puede desarrollar en dos sesiones de clase y se pretende que al finalizar el
estudiante sea capaz de:
 Construir bloques anónimos en los cuales se utilizan datos escalares
 Construir bloques anónimos en los cuales se utilizan estructuras de control condicionales y
bucles.

CONCEPTOS PREVIOS

 Unidades Léxicas
 Estructura de un bloque PL/SQL.
 Declaraciones de variables y tipos PL/SQL
 Expresiones y operadores.
 Estructuras de control PL/SQL.

RECURSOS

1. Libro guía: URMAN, Scott. “ORACLE 8: Programación PL/SQL”. España 1998. Capítulo 2: El
bloque PL/SQL; Unidades Léxicas: identificadores, delimitadores, Literales y Comentarios;
Declaraciones de variables: sintaxis e inicialización; Tipos PL/SQL: escalares, de referencia;
Expresiones y operadores.

2. SQL*Plus instalada en los PC’s de las salas del laboratorio de sistemas. Se puede trabajar con
la versión oficial o la versión express de Oracle, no obstante se presentan algunas diferencias,
porque existen algunos comandos que no se aceptan en la versión express.

RECOMENDACIONES

 Un bloque PL/SQL se puede crear desde la línea de comandos o desde un archivo ejecutable.
Desde la línea de comandos se inicia su escritura y una vez se finaliza (terminando con ; ó /) se
ejecuta de manera automática. Usando un archivo ejecutable (un archivo .sql) en el cual se
escribe el código y posteriormente se ejecuta el archivo (usando el comando START). Esta última
técnica será la utilizada en esta práctica.

 Cuando un bloque PL/SQL contiene una instrucción DBMS_OUTPUT.PUT_LINE antes de


ejecutarlo se debe activar la salida en pantalla, usando la instrucción: SET SERVEROUT ON. Para
desactivar la salida en pantalla: SET SERVEROUT OFF

 Si va a ejecutar el código de los programas que se encuentran en esta guía copiando el código
tenga en cuenta que esta operación puede ocasionar cambios en algunos símbolos como es el
caso de la comilla simple, para eliminar este error se deberá editar el código y cambiar por la
usada en el editor respectivo (se trata de una comilla que no tiene cola).
Institución Universitaria Antonio José Camacho Facultad de Ingeniería: Tecnología en Sistemas
Base de Datos 2 – Práctica. Guía No.1 (Ver. 12 Julio 2010) Ing. Sandra Lucía Guañarita Fernández

ESTRUCTURA DE UN BLOQUE ANÒNIMO

Es una unidad básica de un programa PL/SQL, y se construye por regla general de manera dinámica y
se ejecutan una sola vez. Un bloque anónimo, como cualquier otro bloque PL/SQL, tienen tres
secciones: la sección declarativa (DECLARE), la sección ejecutable(BEGIN) y la sección de
excepciones (EXCEPTION). El bloque anónimo se compila cada vez que es ejecutado.

En el cuadro 1 se muestra un bloque anónimo que permite obtener la potencia de un número entero
elevado a un exponente entero.

Crear el archivo ejecutable que contendrá el bloque anónimo

Para crear un archivo ejecutable se utiliza el comando EDIT seguido del nombre del archivo con la
respectiva extensión. Lo anterior abre una ventana con título de un block de notas y se inicia con la
escritura del código (en este caso escriba las instrucciones del cuadro 1).

sql> EDIT ejercicio1.sql

Cuadro 1. Bloque anónimo usando elementos básicos


DECLARE
potencia NUMBER;
base NUMBER;
exponente NUMBER;
BEGIN
base := '&Base';
exponente := '&ExponenteEntero';
potencia := POWER(base,exponente);
DBMS_OUTPUT.PUT_LINE ('El resultado es ' || potencia);
END;

Recordar:
1) DECLARE: Inicio de la sección declarativa
2) Las instrucciones: potencia NUMBER, base NUMBER y exponente NUMBER
corresponde a declaraciones de variables usando tipos PL/SQL. Se ha utilizado el tipo
escalar NUMBER por ser más también usado en SQL y por tanto más conocido por el
estudiante.
3) BEGIN: inicio de la sección ejecutable.
4) Las instrucciones: base := ‘&Base’ y exponente := ‘&ExponenteEntero’ corresponde
a instrucción de entrada estándar de datos por teclado.
5) La instrucción: potencia := POWER(base,exponente) corresponde a una instrucción
para una fórmula que usa funciones.
6) La instrucción DBMS_OUTPUT.PUT_LINE(…) corresponde a la instrucción de salida
estándar de datos en pantalla.
7) Se han utilizado operaciones de captura de datos, concatenación de cadenas y
asignación, lo cual requiere de los siguientes operadores:
 Operador de captura datos teclado: &
 Operador de concatenación: ||
 Operador de asignación: :=

Ejecutar el programa PL/SQL


2
Institución Universitaria Antonio José Camacho Facultad de Ingeniería: Tecnología en Sistemas
Base de Datos 2 – Práctica. Guía No.1 (Ver. 12 Julio 2010) Ing. Sandra Lucía Guañarita Fernández

Una vez se termina de escribir el programa se cierra el archivo e inmediatamente se procede a


procesarlo (compilar y ejecutar al mismo tiempo) mediante el comando START seguido del nombre
del archivo creado previamente.

sql> START ejercicio1

TIPOS DE DATOS ESCALARES

En las versiones 8.0 en adelante existen cuatro tipos: escalar, compuesto, referencias y LOB (Large
Objects, ‘Objetos de gran tamaño’). En esta sección nos ocuparemos de los tipos escalares.

Los tipos escalares no tienen componentes, y cubren además de los tipos usados en una base de
datos (SQL) otros: numéricos, carácter, raw, fecha, rowid, booleanos y trusted. A continuación se
mencionan los tipos escalares comunes en la mayoría de los lenguajes (numéricos, carácter, y
booleano), para mayor detalle consulte material relacionado con el tema.

 Numéricos: almacenan valores enteros o reales. Se tienen tres tipos básicos: NUMBER,
PLS_INTEGER y BINARY INTEGER.
o NUMBER: el más usado, es igual al de la base de datos (NUMBER en SQL), puede
contener valores enteros o reales almacenado en formato decimal y cuando se requieren
en cálculos el motor PL/SQL los convierte automáticamente a un tipo binario, pueden
usarse tipos equivalentes como INTEGER, DEC, REAL u otros.
o PLS_INTEGER: contiene valores enteros almacenándolos en formato binario con
complemento a 2, para valores que sólo se usan durante los cálculos y no van a ser
almacenados en la base de datos. Los contadores de ciclos son a menudo de este tipo.
o BINARY INTEGER: contiene valores enteros almacenándolos en formato binario con
complemento a 2, evitando que se produzca un error al presentarse desbordamiento en un
cálculo.

 Carácter: almacenan cadenas o datos de tipo carácter. Esta familia está compuesta por
VARCHAR2, CHAR y LONG, junto con NCHAR y NVARCHAR2. Nos ocuparemos de los dos
primeros en este documento.
o VARCHAR2: el más usado, se comporta igual al de la base de datos (VARCHAR2 en SQL),
pueden contener cadenas de caracteres de longitud variable, con una longitud máxima
especificada en bytes (no en caracteres). El subtipo VARCHAR es equivalente.
o CHAR: cadenas de caracteres de longitud fija (en bytes), la longitud es opcional y en este
caso toma valor de 1. Debido a que su longitud es fija, un valor con menor longitud a la
máxima se rellena con caracteres en blanco hasta completar la máxima longitud, dando
problemas al momento de comparaciones directas. El subtipo CHARACTER es
equivalente.

 Booleano: almacenan valores TRUE, FALSE o NUL; se emplean en estructuras de control de


PL/SQL. El único tipo es BOOLEAN.

Ejemplo:

Crear un bloque anónimo que solicite el código, nombre completo y tres notas con una cifra decimal
para un estudiante. Se requiere calcular el promedio aritmético e imprimir el código, nombre completo
y el promedio aritmético. (En este caso escriba las instrucciones del cuadro 2).

3
Institución Universitaria Antonio José Camacho Facultad de Ingeniería: Tecnología en Sistemas
Base de Datos 2 – Práctica. Guía No.1 (Ver. 12 Julio 2010) Ing. Sandra Lucía Guañarita Fernández

sql> EDIT ejercicio2.sql

Cuadro 2. Bloque anónimo usando tipos escalares básicos


DECLARE
v_codigo CHAR(7);
v_nombre_completo VARCHAR(30);
v_nota1 NUMBER(2,1);
v_nota2 NUMBER(2,1);
v_nota3 NUMBER(2,1);
v_promedio NUMBER;
BEGIN
v_codigo := '&Codigo';
v_nombre_completo := '&NombresApellidos';
v_nota1 := '&Nota1';
v_nota2 := '&Nota2';
v_nota3 := '&Nota3';
v_promedio := (nota1 + nota2 + nota3) / 3;
DBMS_OUTPUT.PUT_LINE ('El estudiante ' || v_codigo || ‘ - ‘|| v_nombre_completo || ‘
obtuvo un promedio igual a ‘|| v_promedio);
END;

Ejecutar el programa PL/SQL

Una vez se termina de escribir el programa se cierra el archivo e inmediatamente se procede a


procesarlo (compilar y ejecutar al mismo tiempo) mediante el comando START seguido del nombre
del archivo creado previamente.

sql> START ejercicio2

ESTRUCTURAS DE CONTROL

Los programas PL/SQL al igual que los construidos en cualquier otro lenguaje de programación
incluyen estructuras de control condicionales y ciclos que permiten manejar el comportamiento del
bloque cuando se está ejecutando.

ESTRUCTURA CONDICIONAL

La sentencia condicional incluye cuatro cláusulas: IF obligatoria, ELSE y ELSIF opcionales y END IF
obligatoria. La sintaxis general de la sentencia:

IF expresión THEN
<<instrucciones>>
ELSIF expresión THEN
<<instrucciones>>

ELSE
<<instrucciones>>
END IF;

Ejemplo:

4
Institución Universitaria Antonio José Camacho Facultad de Ingeniería: Tecnología en Sistemas
Base de Datos 2 – Práctica. Guía No.1 (Ver. 12 Julio 2010) Ing. Sandra Lucía Guañarita Fernández

Crear un bloque anónimo que solicite el código, nombre completo y tres notas con una cifra decimal
para un estudiante. Se requiere calcular el promedio aritmético, determinar si el estudiante ganó o
perdió la asignatura (se gana con nota igual o superior a 3.0), imprimir el código, nombre completo,
promedio aritmético y el mensaje respectivo sobre el estado del estudiante. (En este caso escriba las
instrucciones del cuadro 3).

sql> EDIT ejercicio3.sql

Cuadro 3. Bloque anónimo usando estructura de control condicional


DECLARE
v_codigo CHAR(7);
v_nombre_completo VARCHAR(30);
v_nota1 NUMBER(2,1);
v_nota2 NUMBER(2,1);
v_nota3 NUMBER(2,1);
v_promedio NUMBER;
v_estado CHAR(5);
BEGIN
v_codigo := '&Codigo';
v_nombre_completo := '&NombresApellidos';
v_nota1 := '&Nota1';
v_nota2 := '&Nota2';
v_nota3 := '&Nota3';
v_promedio := (nota1 + nota2 + nota3) / 3;

IF v_promedio >= 3.0 THEN


v_estado := ‘Ganó’;
ELSE
v_estado := ‘Perdió’;
END IF;

DBMS_OUTPUT.PUT_LINE ('El estudiante ' || v_codigo || ‘ - ‘|| v_nombre_completo || ‘


obtuvo un promedio igual a ‘|| v_promedio || ‘ ,‘|| v_estado || ‘ la asignatura.‘|| );
END;

Ejecutar el programa PL/SQL

Una vez se termina de escribir el programa se cierra el archivo e inmediatamente se procede a


procesarlo (compilar y ejecutar al mismo tiempo) mediante el comando START seguido del nombre
del archivo creado previamente.

sql> START ejercicio3

ESTRUCTURAS BUCLES

5
Institución Universitaria Antonio José Camacho Facultad de Ingeniería: Tecnología en Sistemas
Base de Datos 2 – Práctica. Guía No.1 (Ver. 12 Julio 2010) Ing. Sandra Lucía Guañarita Fernández

PL/SQL maneja cuatro tipos de bucles: bucles simples (LOOP… END LOOP), bucles MIENTRAS
(WHILE condición LOOP… END LOOP), bucles FOR numéricos (FOR contador IN limite_inferior ..
limite superior LOOP … END LOOP) y bucles FOR cursor (FOR registro IN cursor LOOP…END
LOOP). En esta guía se abordaran los tres primeros, el FOR cursor se abordará en la guía de
cursores.

Ejemplo:

Considere un bloque PL/SQL que permita realizar el proceso que se describe posteriormente para
cada uno de los estudiantes del curso: solicite el código, nombre completo y tres notas con una cifra
decimal para un estudiante. Se requiere calcular el promedio aritmético, determinar si el estudiante
ganó o perdió la asignatura (se gana con nota igual o superior a 3.0), imprimir el código, nombre
completo, promedio aritmético y el mensaje respectivo sobre el estado del estudiante.

El código para resolver el enunciado anterior se describe en los cuadros 4 y 5. En este último se
mejora el cuadro 4 incorporando un bucle FOR.

sql> EDIT ejercicio4.sql

Cuadro 4. Bloque anónimo usando estructuras de control bucle LOOP… END LOOP
DECLARE
v_codigo CHAR(7);
v_nombre_completo VARCHAR(30);
v_nota1 NUMBER(2,1);
v_nota2 NUMBER(2,1);
v_nota3 NUMBER(2,1);
v_promedio NUMBER;
v_estado CHAR(5);
v_continuar CHAR(1);
BEGIN
LOOP
v_codigo := '&Codigo';
v_nombre_completo := '&NombresApellidos';
v_nota1 := '&Nota1';
v_nota2 := '&Nota2';
v_nota3 := '&Nota3';
v_continuar := '&Continuar';
v_promedio := (v_nota1 + v_nota2 + v_nota3) / 3;

IF v_promedio >= 3.0 THEN


v_estado := ‘Ganó’;
ELSE
v_estado := ‘Perdió’;
END IF;

DBMS_OUTPUT.PUT_LINE ('El estudiante ' || v_codigo || ' - '|| v_nombre_completo || '


obtuvo un promedio igual a '|| v_promedio || ' , '|| v_estado || ' la asignatura. ' );
EXIT WHEN v_continuar = 'N';
END LOOP;
END;

Recordar:

6
Institución Universitaria Antonio José Camacho Facultad de Ingeniería: Tecnología en Sistemas
Base de Datos 2 – Práctica. Guía No.1 (Ver. 12 Julio 2010) Ing. Sandra Lucía Guañarita Fernández

1) LOOP : inicio del bucle


2) EXIT WHEN : condición de parada o salida del bucle
3) END LOOP : final del bucle
4) Las instrucciones entre LOOP y EXIT WHEN corresponden al cuerpo del bucle, es
decir aquellas instrucciones que se repiten mientras la condición sea falsa.

sql> EDIT ejercicio5.sql

Cuadro 5. Bloque anónimo usando estructuras de control bucle


DECLARE
v_codigo CHAR(7);
v_nombre_completo VARCHAR(30);
v_nota NUMBER(2,1);
v_suma_notas NUMBER;
v_promedio NUMBER;
v_estado CHAR(5);
v_continuar CHAR(1);
v_contador BINARY_INTEGER;
BEGIN
LOOP
v_codigo := '&Codigo';
v_nombre_completo := '&NombresApellidos';

FOR v_contador IN 1..3 LOOP


v_nota := '&Nota';
v_suma_notas := v_suma_notas + nota;
END LOOP;
v_continuar := '&Continuar';

v_promedio := v_suma_notas / 3;
IF v_promedio >= 3.0 THEN
v_estado := ' Ganó ';
ELSE
v_estado := ' Perdió';
END IF;

DBMS_OUTPUT.PUT_LINE ('El estudiante ' || v_codigo || ' - '|| v_nombre_completo || '


obtuvo un promedio igual a '|| v_promedio || ' , '|| v_estado || ' la asignatura. ' );
EXIT WHEN v_continuar = 'N';
END LOOP;
END;

Recordar:
1) FOR : inicio del bucle

7
Institución Universitaria Antonio José Camacho Facultad de Ingeniería: Tecnología en Sistemas
Base de Datos 2 – Práctica. Guía No.1 (Ver. 12 Julio 2010) Ing. Sandra Lucía Guañarita Fernández

2) v_contador : variable índice declarada de modo explícito. Cuando llega al límite superior
se termina el bucle. Se incrementa en una unidad cada vez que se ejecuta el cuerpo del
ciclo.
3) IN : determina el modo de conteo y los límites del bucle
4) 1..3 : límites del bucle, inferior y superior respectivamente.
5) LOOP : inicio del cuerpo del bucle
6) END LOOP : final del bucle
7) Las instrucciones entre LOOP y END LOOP corresponden al cuerpo del bucle, es
decir aquellas instrucciones que se repiten hasta que la variable índice supera el valor
máximo.

También podría gustarte