Download Plsql PDF

TitlePlsql
TagsPl/Sql Sql Table (Database) Notation
File Size168.0 KB
Total Pages32
Document Text Contents
Page 2

59

Bloques PL/SQL

• Bloque PL/SQL: Unidad básica en PL/SQL.
– Todos los programas PL/SQL están compuestos por bloques, que

pueden anidarse.
– Normalmente cada bloque realiza una unidad lógica de trabajo.
– Estructura de un bloque PL/SQL:
DECLARE

/* Declaración de variables, tipos, cursores y
subprogramas locales, con VISIBILIDAD hasta END; */

BEGIN
/* Programa: Órdenes (SQL y procedimentales) y bloques.

Esta sección es la única obligatoria. */
EXCEPTION

/* Manejo de excepciones (errores) */
END;

– Excepciones: Permiten controlar los errores que se produzcan sin
complicar el código del programa principal.

• Cuando se produce un error, la ejecución del programa salta a la
sección EXCEPTION y allí puede controlarse qué hacer
dependiendo del tipo de error producido.

60

Bloques PL/SQL

• Tipos de Bloques:
– Anónimos (anonymous blocks): Se construyen normalmente de

manera dinámica para un objetivo muy concreto y se ejecutan, en
general, una única vez.

– Nominados (named blocks): Son similares a los bloques anónimos
pero con una etiqueta que da nombre al bloque.

– Subprogramas: Son procedimientos (procedures), funciones
(functions) o grupos de ellos, llamados paquetes (packages).

• Se construyen para efectuar algún tipo de operación más o
menos frecuente y se almacenan para ejecutarlos cuantas veces
se desee.

• Se ejecutan con una llamada al procedimiento, función o paquete.
– Disparadores (triggers): Son bloques nominados que se almacenan

en la BD. Su ejecución está condicionada a cierta condición, como
por ejemplo usar una orden concreta del DML.

• Comentarios: Pueden incluirse siempre que se desee.
– Monolínea: Empiezan con 2 guiones -- y terminan a final de línea.
– Multilínea: Empiezan con /* y terminan con */ (como en C).

Page 16

87

• Funciones: Para crearlas (o reemplazarlas) hay una orden DDL:
CREATE [OR REPLACE] FUNCTION <NombreF> [(

<Argumento1>[IN|OUT|IN OUT] <Tipo1>,
...
<ArgumentoN> [IN|OUT|IN OUT] <TipoN>)]
RETURN <TipoRetorno> {IS|AS}

<Bloque_de_la_Función_SIN_la_palabra_DECLARE>;
– Los Argumentos son opcionales (también pueden ser de los 3 modos).
– La Llamada a una Función:

• Se efectúa como en un lenguaje de programación normal.
• No es una orden PL/SQL como lo es la llamada a Procedimiento.
• Es una expresión que toma el valor que se especifique en el

bloque como valor de retorno con:
RETURN <Expresión_a_Devolver>;

– La expresión tras RETURN debe ser del tipo de retorno especificado.
– La sentencia RETURN es obligatoria. Pueden existir varias pero sólo

se ejecutará una de ellas, pues la primera en ejecutarse devuelve el
control al entorno que hizo la llamada.

– La sentencia RETURN puede usarse en un Procedimiento, sin
expresión, y sirve sólo para devolver el control a donde se llamó.

Funciones: La orden RETURN

88

– Ejemplo: Programar una Función que tenga como argumento el DNI de
un Empleado. La función devolverá:

• La diferencia entre su Salario y el Salario más grande de entre todos
los empleados de su departamento.

• La función devolverá -1 si no existe ese empleado.
CREATE OR REPLACE FUNCTION DifSalario
(P_DNI_Empleado IN NUMBER) RETURN NUMBER IS
SalarioDNI Empleados.Salario%TYPE;
SalarioMAX Empleados.Salario%TYPE;
DptoDNI Empleados.Dpto%TYPE;

BEGIN
-- Hallar el Salario y Dpto del Empleado en cuestión:
SELECT Salario, Dpto INTO SalarioDNI, DptoDNI
FROM Empleados WHERE DNI = P_DNI_Empleado;

-- Hallar el Salario mayor de entre todos sus colegas:
SELECT MAX(Salario) INTO SalarioMAX FROM Empleados
WHERE Dpto = DptoDNI;

RETURN SalarioMAX - SalarioDNI;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN -1;

END DifSalario;

Funciones: Ejemplo

No puede producirse la
excepción TOO_MANY_ROWS
si DNIes llave primaria.

Page 32

119

• Cuando en un mismo bloque PL/SQL puede generarse una misma
excepción en distintas órdenes, ¿Cómo detectar cual ha sido?
– Ejemplo:

– Dos Soluciones: Usar una variable o poner cada orden en su propio bloque.

Localización de Errores

BEGIN
SELECT ...
SELECT ...
...

EXCEPTION
WHEN NO_DATA_FOUND THEN
-- ¿Qué orden SELECT generó el error?

END;

DECLARE
Contador NUMBER(1) := 1;

BEGIN
SELECT ...
Contador:=2;
SELECT ...

...
EXCEPTION
WHEN NO_DATA_FOUND THEN
IF Contador=1 THEN

...
ELSE

...
END IF;

END;

BEGIN
BEGIN
SELECT ...

EXCEPTION
WHEN NO_DATA_FOUND THEN
...

END;
BEGIN
SELECT ...

EXCEPTION
WHEN NO_DATA_FOUND THEN
...

END;
...

END;

120

• Prueba: Cualquier programa (incluidos los bloques PL/SQL) debe
Probarse exhaustivamente para asegurar su correcto funcionamiento.
– Las Pruebas se hacen en un entorno especial de Desarrollo y no de

Producción, que debe ser suficientemente simple.
• Depuración: Si existen Errores:

– Localizar dónde está el error y Definir qué está mal y porqué está fallando.
– Dividir el programa en partes y Probar cada una de ellas, empezando por

casos de prueba sencillos.
• Técnicas de Depuración:

– Insertar los valores intermedios de las variables en una tabla temporal, que se
consultará cuando el programa termine.

• Existe un paquete llamado DEBUG que facilita esta tarea. Tiene dos procedimientos:
– DEBUG.Debug(A,B) → Inserta en la tabla Debug_Table esos dos valores de tipo

VARCHAR2 en una fila (usualmente A es el nombre de una variable y/o algún comentario
sobre el lugar donde se utiliza y B es el valor de esa variable).

– DEBUG.Reset → Inicializa la depuración (borra las filas de Debug_Table).
– Visualizar los valores intermedios de las variables, conforme el programa se

va ejecutando: Paquete DBMS_OUTPUT y sus procedimientos PUT, PUT_LINE...
• Esos procedimientos insertan sus argumentos en un buffer interno.
• En SQL*Plus puede activarse para mostrar el buffer: set serveroutput on
[size n], donde n∈[2000,1000000] es el número de bytes máximo (2000 por defecto).

• PL/SQL es un lenguaje para gestionar BD, por lo que la E/S es limitada.
– Depuradores PL/SQL: Existen varios programas debuggers para rastrear un

programa PL/SQL, como son Oracle Procedure Builder y SQL-Station.

Métodos de Prueba y Depuración

Similer Documents