You are on page 1of 5

Características de PL/SQL

¿Qué es PL/SQL?

Procedural Language / Structured Query Language

SQL es un lenguaje de consulta para los sistemas de bases de datos


relacionales (estándar).

PL/SQL amplia o potencia el lenguaje SQL con los elementos característicos de


los lenguajes de programación.

Estructuras de Bloques

La unidad Básica de PL/SQL es el bloque, todos los programas PL/SQL están


compuestos por Bloques, que pueden estar anidados. Normalmente, cada
bloque define una unidad lógica de trabajo en el programa, separando así unas
tareas de otras.

Un ejemplo de bloque:

Declare

/* Sección declarativa -- aquí se construyen las variables PL/SQL,


tipos, cursores y subprogramas locales */

begin

/* sección ejecutable -- aqui se incluyen las instrucciones SQL y


procedimientos
esta es la sección principal del bloque y la única que es OBLIGATORIA*/

exception

/* seccion de tratamiento de excepciones -- aqui se incluyen


las instrucciones para el tratamiento de las excepciones*/

end;

La única sección obligatoria es la SECCION EJECUTABLE. Las secciones


declarativas y de tratamiento de excepciones son opcionales. La sección
ejecutable también debe contener, al menos, una instrucción ejecutable. Las
diferentes secciones de un bloque separan las distintas funciones de un
programa PL/SQL.
Tratamiento de Errores

La sección de tratamiento de excepciones del bloque se utiliza para responder


a los errores de ejecución con los que se encuentre el programa. Al separar el
código de tratamiento de errores del cuerpo principal del programa, se
consigue que la estructura de éste sea clara. Por ejemplo, el siguiente bloque
PL/SQL muestra una sección de tratamiento de excepciones que registra el
error detectado, junto con la fecha actual y la identidad del usuario que
encontró el error:

declare

v_ErrorCode number; -- codigo del error


v_ErrorMsg VARCHAR2(200); -- texto del mensaje de error
v_CurrentUser VARCHAR2(8); -- usuario actual de la BD
v_Information VARCHAR2(100); -- informacion sobre el error

begin /* codigo... donde se procesan los datos...*/

exception when others then


-- asignacion de valores a las variables del registro, utilizando funciones
predefinidas

v_ErrorCode := SQLCODE;
v_ErrorMsg := SQLERRM;
v_CurrentUser := USER;
v_Information := ‘error encountered on ‘ ¦¦ ‘ by database user ´ ¦¦
v_CurrentUser;
--Ahora inserción del mensaje en la tabla de errores

INSERT INTO log_table(code, message,info) VALUES (v_ErrorCode,


v_ErrorMsg, v_Information);

End;

Uso de SQLCODE y SQLERRM

Al manejar una excepción es posible usar las funciones predefinidas


SQLCode y SQLERRM para aclarar al usuario la situación de error acontecida.

SQLcode devuelve el número del error de Oracle y un 0 (cero) en caso de


exito al ejecutarse una sentencia SQL.

Por otra parte, SQLERRM devuelve el correspondiente mensaje de error.

Estas funciones son muy útiles cuando se utilizan en el bloque de


excepciones, para aclarar el significado de la excepción OTHERS.
Estas funciones no pueden ser utilizadas directamente en una sentencia
SQL, pero sí se puede asignar su valor a alguna variable de programa y luego
usar esta última en alguna sentencia.

DECLARE
err_num NUMBER;
err_msg VARCHAR2(255);
result NUMBER;
BEGIN
SELECT 1/0 INTO result
FROM DUAL;

EXCEPTION
WHEN OTHERS THEN

err_num := SQLCODE;
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error:'||TO_CHAR(err_num));
DBMS_OUTPUT.put_line(err_msg);
END;

También es posible entregarle a la función SQLERRM un número negativo


que represente un error de Oracle y ésta devolverá el mensaje asociado.

DECLARE
msg VARCHAR2(255);
BEGIN
msg := SQLERRM(-1403);
DBMS_OUTPUT.put_line(MSG);
END;

A continuación, se muestra la tabla con las excepciones PL/SQL, el error, ORA


que representa y cuando se utiliza:

You might also like