> Manuales > Tutorial de Oracle

Es importante controlar los posibles errores y además distinguir los distintos tipos de programas que podemos crear con PL/SQL.

Gestión de excepciones

Las excepciones sirven para tratar los errores y mensajes. Oracle tiene una serie de excepciones que son las más frecuentes y con las que la mayoría de la gente trabaja.

Unas de las más usadas son:
NO_DATA_FOUND (cuando una orden tipo select no ha devuelto ningún valor)
TOO_MANY_ROWS (cuando una orden tipo select ha devuelto mas de una fila)
OTHERS THEN RAISE_APPLICATION_ERROR (para cualquier otro tipo de error desconocido)

Un ejemplo seria el siguiente:

DECLARE
   vapellido varchar(10);
   voficio varchar(20);
BEGIN
   select apellido,oficio INTO vape,voficio from emple where emp=15;
   DBMS_OUTPUT.PUT_LINE (vape||: - || voficio);
EXCEPTION
   WHEN NO_DATA_FOUND THEN insert into temp values('No hay datos');
   WHEN TOO_MANY_ROWS THEN insert into temp values ('Demasiados datos');
   WHEN OTHER THEN RAISE_APPLICATION_ERROR(-2000,'Error en aplicación');
END;

Estructura modular

En PL/SQL podemos distinguir 3 tipos de programas o bloques.

Bloques anónimos: Son los que no tienen nombre y comienzan con el DECLARE, es decir los que hemos ido viendo hasta ahora.

Procedimientos: Se trata del programa más utilizado en PL/SQL y su formato es el siguiente:

PROCEDURE <nombre_procedimiento>
   [(<lista de parámetros>)]
   IS
      [<declaraciones>]
   BEGIN
      <instrucciones>;
   [EXCEPTIONS
      <excepciones>;]
   END;

En el formato distinguimos dos partes claramente, la cabecera donde esta el nombre del procedimiento y los parámetros y el cuerpo donde se situá un bloque anónimo.

Funciones: similares a los procedimientos pero con la función añadida de que pueden devolver valores.

Si subís varias lineas y veis el ejemplo de control de excepciones, podéis ver que hemos utilizado un atributo como DBMS_OUTPUT. Bien pues esto lo que nos permite es visualizar en pantalla los resultados, tanto excepciones como mensajes. Lo utilizamos porque PL/SQL no dispone de ordenes o sentencias que capturen datos introducidos por teclado, ni tampoco para visualizar datos en pantalla.

DBMS_OUTPUT.PUT_LINE nos permite visualizar en pantalla, pero para que funcione correctamente tenemos que poner el SET SERVEROUTPUT a ON

Si queremos que un bloque nos pida algún dato tenemos que anteponer el símbolo & delante de la variable, de esta forma cuando el bloque llegue a ese punto nos pedirá por pantalla el valor.

Otra sentencia importante es la que nos permite visualizar los errores que hemos podido tener al crear el bloque o procedimiento. Esta sentencia es: show errors

Podemos agregar comentarios a nuestros bloques anteponiendo al comentario /* <comentario> */

Si queremos que el bloque anónimo se ejecute directamente cuando terminamos de crearlo debemos poner el símbolo / que, ademas de guardar el bloque en el buffer, lo ejecuta.

También podemos guardar los bloques anónimos en ficheros para poderlos ejecutar posteriormente. Para ello ejecutamos la siguiente sentencia:

save nombrefichero

Y para ejecutarlo primero tenemos que cargar el fichero en el buffer y para ello tenemos que ejecutar la siguiente sentencia:

get nombrefichero

Una vez cargado el fichero ejecutamos el bloque con la sentencia run nombrefichero.
O podemos hacer los dos pasos con una sola sentencia: start nombrefichero

Sin embargo para los procedimientos es totalmente distinto ya que al tener nombre se almacena automáticamente en la base de datos y para ejecutarlo tan solo tenemos que realizar la siguiente operación:

execute nombre_procedimiento(parámetros);

En el siguiente capitulo revisaremos todo lo que hemos visto en la introducción del PL/SQL, pero de una forma mas exhaustiva.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual