Inicio > Oracle > Construyendo con Bloques en PL/SQL

Construyendo con Bloques en PL/SQL


PL/SQL es un lenguaje estructurado con bloques. Un bloque PL/SQL es definido por las palabras clave :

DECLARE, BEGIN, EXCEPTION, y END

que dividen el bloque en tres secciones

1. Declarativa: sentencias que declaran variables, constantes y otros elementos de código, que después pueden ser usados dentro del bloque
2. Ejecutable: sentencias que se ejecutan cuando se ejecuta el bloque
3. Manejo de excepciones: una sección especialmente estructurada para atrapar y manejar cualquier excepción que se produzca durante la ejecución de la sección ejecutable

Sólo la sección ejecutable es obligatoria. No es necesario que usted declare nada en un bloque, ni que maneje las excepciones que se puedan lanzar.

SET SERVEROUTPUT ON
PL/SQL en Oracle requiere para obtener el resultado en pantalla SERVEROUTPUT .

Un bloque es en sí mismo una sentencia ejecutable, por lo que se pueden anidar los bloques unos dentro de otros.

Aquí hay algunos ejemplos:

El clásico “¡Hola RAHSUAREZ!” es un bloque con una sección ejecutable que llama al procedimiento DBMS_OUTPUT.PUT_LINE para mostrar texto en pantalla:

BEGIN
DBMS_OUTPUT.put_line(‘¡Hola RAHSUAREZ!‘);
END;

HOLA RAHSUAREZ

El siguiente bloque declara una variable de tipo VARCHAR2 (un string) con un largo máximo de 100 bytes para contener el string ‘¡Hola RAHSUAREZ!’.
Después, el procedimiento DBMS_OUTPUT.PUT_LINE acepta la variable, en lugar del literal, para desplegarlo:

DECLARE
lmensaje VARCHAR2(100) := ‘¡Hola RAHSUAREZ!’;
BEGIN
DBMS_OUTPUT.put_line(lmensaje);
END;

Note que he llamado a la variable lmensaje. Normalmente uso el prefijo “l” para variables locales “variables definidas dentro del código de un bloque” y el prefijo “g” para variables globales definidas en un paquete.
El siguiente ejemplo de bloque agrega una sección de manejo de excepciones que atrapa cualquier excepción (WHEN OTHERS) que pueda ser lanzada y muestra el mensaje de error, que es retornado por la función SQLERRM (provista por Oracle).

DECLARE
lmensaje VARCHAR2(100) := ‘¡Hola RAHSUAREZ!’;
BEGIN
DBMS_OUTPUT.put_line(lmensaje);
EXCEPTION
  WHEN OTHERS
    THEN
DBMS_OUTPUT.put_line(SQLERRM);
END;

HOLA RAHSUAREZ01El siguiente ejemplo de bloque se muestra la habilidad de PL/SQL de anidar bloques dentro de bloques así como el uso del operador de concatenación (||) para unir múltiples strings.

HOLA RAHSUAREZ02

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
lmensaje VARCHAR2(100) := ‘¡Hola’;
BEGIN
   DECLARE
lmensaje2 VARCHAR2(100) := lmensaje || ‘ RAHSUAREZ!’;
BEGIN
DBMS_OUTPUT.put_line(lmensaje2);
END;
    EXCEPTION
       WHEN OTHERS
        THEN
DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
END;

Vamos a crear un procedimiento denominado Hola_RAHSUAREZ mediante la ejecución de la siguiente sentencia DDL (Data Definition Language):

CREATE OR REPLACE PROCEDURE Hola_RAHSUAREZ IS
lmensaje VARCHAR2(100) := ‘¡Hola Hola_RAHSUAREZ !’;
BEGIN
DBMS_OUTPUT.put_line(lmensaje);
END Hola_RAHSUAREZ;

HOLA RAHSUAREZ03

Ahora supongamos que no sólo queremos mostrar nuestros mensajes “Hola”. A veces tenemos que mantener los mensajes en una tabla en la base de datos; en otras ocasiones, tenemos que pasar el texto de nuevo al entorno del cliente para su visualización. En otras palabras, necesitamos separar la forma en que se construyó el mensaje “Hola” de la forma en que se utiliza (se visualiza, se guarda, se envía otro programa, etc). Podemos alcanzar este nivel deseado de flexibilidad moviendo el código que construye el mensaje a su propia función:

CREATE OR REPLACE FUNCTION
mensajeHola(lclugar IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
   RETURN ‘¡Hola ‘ || lclugar;
END mensajeHola;

Teniendo el código necesario para construir el mensaje dentro de la función hola_mensaje, podemos utilizar este mensaje de múltiples maneras. Podemos, por ejemplo, llamar a la función para obtener el mensaje y asignárselo a una variable:

SET SERVEROUTPUT ON ;
DECLARE
lmensaje  VARCHAR2(100);
BEGIN
lmensaje := mensajeHola(‘Universo de RAHSUAREZ!’);
DBMS_OUTPUT.put_line(lmensaje);
END;

HOLA RAHSUAREZ04

También podemos llamar la función desde una sentencia SQL. En el siguiente bloque, insertamos el mensaje en una tabla de la base:

BEGIN
INSERT INTO TablaMensaje(fecha_mensaje, texto_mensaje)
VALUES (SYSDATE, mensajeHola(‘Jauja’));
END;

logo shipment4you 342 68 PNG ESP WEB

Categorías:Oracle
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: