sábado, 29 de julio de 2023

PL/SQL - Bloques

PL/SQL es un lenguaje de programación procedimental para manipular datos de una BD Oracle. Con este lenguaje podemos crear scripts para poder manipular información de tablas, ejecutar otros scripts, crear procedimientos que se activen ante un evento(triggers), que devuelvan valores (funciones) o que simplementen realicen una operación al invocar un procedimiento (stored procedures).

Si queremos saber la versión instalada podemos ejecutar esta sentencia:

-- Con una consulta 
SELECT * FROM v$version;

En PL/SQL podríamos ejecutar el siguiente bloque de código:


-- Con un bloque PL/SQL
SET SERVEROUTPUT ON;
DECLARE
    version_inst VARCHAR(200);
    consulta VARCHAR(200):='SELECT BANNER FROM v$version';
BEGIN
    -- Ejecutamos consulta
    EXECUTE IMMEDIATE consulta INTO version_inst;
    dbms_output.put_line('Version instalada: '||version_inst);
END;
/

Si queremos podríamos crear excepciones:

-- Con un bloque PL/SQL con manejo de excepción
SET SERVEROUTPUT ON;
DECLARE
   NULL_STRING EXCEPTION;
   PRAGMA 
   EXCEPTION_INIT(NULL_STRING, -06535);
   version_inst VARCHAR(200);
   consulta VARCHAR(200);
BEGIN
    -- Ejecutamos consulta
    EXECUTE IMMEDIATE consulta INTO version_inst;
    dbms_output.put_line('Version instalada: '||version_inst);
    EXCEPTION
        WHEN NULL_STRING THEN
           dbms_output.put_line('Error: No existe la tabla o la consulta es erronea o esta vacía');
END;
/

Como se puede ver, creamos una excepción (NULL_STRING) para verificar que la cadena de consulta es nula (vacía). Usamos PRAGMA la cual es una palabra reservada de Oracle para añadir directivas al compilador. Ésta le dice al compilador que se comporte de cierta manera, en este caso es una excepción (un error en el flujo del programa).

El pragma EXCEPTION_INIT asocia un nombre de excepción con un número de error de Oracle. Puede interceptar cualquier error ORA- y escribir un controlador específico para él en lugar de usar el controlador OTROS (OTHERS).

La sección de EXCEPTION WHEN se ejecuta cuando ocurre alguna excepción. Dependiendo de la programación se podrá (o no) cachar correctamente la excepción. Recordar que una excepción es una anomalía en el flujo de un programa, no necesariamente es un error grave. En caso de un error, el programa se terminará abruptamente.


Al final tendríamos algo como esto:

-- Con un bloque PL/SQL y verificando consulta
SET SERVEROUTPUT ON;
DECLARE
   NULL_STRING EXCEPTION;
   PRAGMA 
   EXCEPTION_INIT(NULL_STRING, -06535);
   version_inst VARCHAR(200);
   consulta VARCHAR(200):='SELECT BANNER FROM v$version';
BEGIN
    IF LENGTH(consulta) > 0 THEN
       -- Ejecutamos consulta
       EXECUTE IMMEDIATE consulta INTO version_inst;
       dbms_output.put_line('Version instalada: '||version_inst);
    END IF;
    EXCEPTION
        WHEN NULL_STRING THEN
           dbms_output.put_line('Error: No existe la tabla o la consulta es erronea o esta vacía');
END;
/

En próximos post veremos más ejemplos.

Enlaces:

https://livesql.oracle.com/
https://www.techonthenet.com/oracle
http://www.rebellionrider.com
https://docs.oracle.com
https://www.codifica.me/pragma/
https://elbauldelprogramador.com/plsql-excepciones/