Sie sind auf Seite 1von 8

GUIA No.

3 PL/ SQL - LENGUAJE DE PROGRAMACIÓN ESTRUCTURADO

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

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.

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

1. 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.

2. 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 ServerOutput
ON.. Para desactivar la salida en pantalla: SET SERVEROUT OFF

3. 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).
QUE ES PL/SQL

PL/SQL es un lenguaje de programación estructurado. Es un lenguaje procedimental que amplía la


funcionalidad de SQL, añadiendo estructuras habituales en otros lenguajes de programación, entre
las que se encuentran:

Variables y Tipos
Estructuras de control
Procedimientos y Funciones
Tipos de Objetos y Métodos.

QUE ES UN BLOQUE

Es una unidad básica de un programa PL/SQL.

Podemos crear diferentes tipos de bloques:

Bloques anónimos: Se construyen de forma dinámica y se suelen ejecutar una sola vez.

Subprogramas: Procedimientos, paquetes y funciones, almacenados en la base de datos y que se


ejecutan en múltiples ocasiones. Los subprogramas se ejecutarán Mediante una llamada.

Disparadores (“Triggers”): Bloques nominados que se almacenan en la base de


datos y que se ejecutan ante algún suceso.

BLOQUE ANONIMO

Siendo una unidad básica de un programa PL/SQL, 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).

DECLARE: sección declarativa (opcional). Contiene las variables, constantes ...

BEGIN: sección ejecutable (obligatoria). Contiene órdenes SQL para manipular datos
de la base de datos y órdenes PL/SQL para manipular los datos del bloque

EXCEPTION: sección de excepciones (opcional). Especifica las acciones a realizar en


caso de error o cuando se producen excepciones en la ejecución, son predefinidas e informan
de los errores producidos en la ejecución de las sentencias SQL por parte del sistema de
gestión de bases de datos. Además de éstas, el programador puede definir excepciones de uso
específico, cuyo control es enteramente gestionado por él.

La estructura general es:

[DECLARE
variables, constantes, excepciones de usuario...]

BEGIN
órdenes SQL
órdenes PL/SQL
[EXCEPTION
acciones a realizar al ocurrir un error]

END; /.

DECLARACION DE VARIABLES

Las variables se definen en la sección declarativa de los bloques PL/SQL dónde también pueden
inicializarse. También podrán utilizarse para almacenar valores devueltos o requeridos por una
orden SQL.

Todas las variables tienen un tipo. Los posibles tipos de una variable son:

Escalar. Almacenan un valor único. Son los mismos que los de las columnas de las tablas
(VARCHAR2, NUMBER, DATE, CHAR, LONG, LONG_RAW, BINARY_INTEGER,
LAW_INTEGER) más el BOOLEAN

Compuesto. Grupos de datos: tablas PL/SQL, registros...


Puntero. Designan elementos de otros programas.
LOB (Large OBjects). Almacenan gran cantidad de información. Las variables de tipo
LOB permiten almacenar datos no estructurados (imágenes, texto...) de hasta 4 GB de
tamaño

SINTAXIS PARA DECLARAR VARIABLES:


<identificador> := <valor>;

Ejemplo:

DECLARE

fecha DATE;
dep_num NUMBER(2) NOT NULL := 10;
ciudad VARCHAR2(10) := ‘Ciudad Real’;
Km_a_milla CONSTANT NUMBER := 1.4;

Las variables declaradas como NOT NULL siempre deben ser inicializadas. La inicialización puede
hacerse utilizando := o . Las constantes deben ser inicializadas.

Pero si la variable no va estar inicializada se le puede pedir al usuario


Cod_cliente:=&cod_cliente;

El atributo %TYPE se utiliza para declarar una variable con el mismo tipo que una
columna asi: <identificador> {<tabla>.<columna> | <nombre_variable>}%TYPE;

Ejemplo:
var_nombre Empleados.nombre%TYPE;

balance NUMBER;
balance_minimo balance%TYPE := 10;

TIPOS DE DATOS
COMENTARIOS EN PL/SQL

Pueden añadirse comentarios al código. Estos comentarios pueden ser especificados con:
/*comentario
más comentario */
-- comentario de línea

Funciones y operadores PL/SQL


Las funciones y operadores son los mismos utilizados en SQL Aritméticos, Lógicos,
Concatenación, Paréntesis. Y además, existe el operador exponencial (**) por ejemplo:
(CONCAT, LENGTH, ROUND, TRUNC, MAX, MIN excepto las de agrupamiento (ya que estas se
aplican sobre una columna de una tabla).

ENTRADA/SALIDA DE DATOS

Existen algunas funciones que nos pueden ayudar a depurar programas y a interactuar con el
usuario mostrando datos por pantalla y pidiendo datos al usuario.

Salida de datos
Para mostrar una cadena por pantalla podemos utilizar y se debe activar la opción
SET ServerOutput ON.

DBMS_OUTPUT.PUT_LINE(<cadena de caracteres>);

Entrada de datos

Cuando trabajamos pidiendo datos al usuario es habitual especificar la opción SET VERIFY OFF
para evitar que el sistema nos muestre el valor que tenía la variable antes y que nos confirme el
nuevo valor que toma.

Para pedir datos al usuario se utiliza una variable de substitución, dentro del código fuente del
bloque PL/SQL, si esta variable no está inicializada, se le pedirá el valor al usuario:

SET SERVEROUTPUT ON;


DECLARE
Cod_cli NUMBER(10);
BEGIN
Cod_cli:=&Cod_cli;
DBMS_OUTPUT.PUT_LINE('El codigo del cliente es: '||Cod_cli);
END;
/
EJEMPLO

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


DECLARE
potencia NUMBER(10);
base NUMBER(10);
exponente NUMBER(10);
BEGIN
base := '&base';
exponente := '&exponente';
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: :=

EJERCICIO

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).

EDI

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
DECLARE
v_num NUMBER := &v;

BEGIN
IF v_num < 50 THEN
DBMS_OUTPUT.PUT_LINE('Valor pequeño');

ELSIF v_num < 100 THEN


DBMS_OUTPUT.PUT_LINE('Valor mediano');

ELSE
DBMS_OUTPUT.PUT_LINE('Valor grande');
END IF;
END;
/

Ejercicio:
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).

Bloque anónimo usando estructura de control condicional

ESTRUCTURAS BUCLES

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)..

Orden LOOP
Los bucles LOOP son bucles que se ejecutan siempre, para salir de ellos tendremos que
poner una instrucción de salida dentro del bucle. Su Sintaxis es:

LOOP
[EXIT WHEN <condición>]
END LOOP;
Tener en cuenta
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.

Ejemplo:

SET ServerOutput ON;


SET VERIFY OFF;

DECLARE
num NUMBER :=1;

BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('Valor: '|| num);
num := num +1;
EXIT WHEN num > 10;
END LOOP;
END;
/

Ejercicio:
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.

Bloque anónimo usando estructuras de control bucle LOOP… END LOOP

ORDEN FOR

Los bucles FOR se repiten un número determinado de veces.

Sintaxis: FOR <contador> IN [REVERSE] <min>..<max> LOOP


...
END LOOP;

Ejemplo:

SET ServerOutput ON;


SET VERIFY OFF;
DECLARE
num NUMBER;

BEGIN
FOR num IN 1.. 10 LOOP
DBMS_OUTPUT.PUT_LINE('Valor: '|| num);

END LOOP;
END;
/

Tener en cuenta:
1) FOR : inicio del bucle
2) num: 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..10 : 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.

Realizar el ejercicio de las notas utilizando un Orden FOR

TALLER INDEPENDIENTE AFIANZAMIENTO GUIA No.. 3

Realizar el ejercicio de las notas utilizando un Orden FOR

1. Crear un PL/SQL que pidas dos números y calcule la suma, el promedio y la resta.
2. Leído un numero por teclado determinar si es primo o no.
3. Definir si el número que está entrando por teclado es igual al número 25 o es menor o es
mayor. Muestre por pantalla su comparación, incluyendo el mensaje.
4. Leído un numero por teclado generar los números impares desde uno hasta el . mismo
número digitado.

Das könnte Ihnen auch gefallen