Inicio > Oracle > PL SQL – ¿Por qué anidar bloques?

PL SQL – ¿Por qué anidar bloques?


Podemos poner BEGIN antes de cualquier conjunto de una o más sentencias ejecutables seguidas de un END, creando un bloque anidado con esas sentencias.

Existen 2 ventajas principales para hacer esto:

(1) posponer la asignación de memoria para variables que se necesitan únicamente en el bloque anidado, y

(2) limitar la propagación de una excepción lanzada por una de las sentencias del bloque anidado.

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
lcMensaje1  VARCHAR2(100) := ‘Hola’;
lcMensaje2  VARCHAR2(100) := ‘ RAHSUAREZ!’;
BEGIN
  IF SYSDATE >= TO_DATE(’01/01/2015′)
THEN
lcMensaje2 := lcMensaje1 || lcMensaje2;
DBMS_OUTPUT.put_line(lcMensaje2);
ELSE
DBMS_OUTPUT.put_line(lcMensaje1);
END IF;
END;

Bloques 001

El bloque despliega “¡Hola RAHSUAREZ!” cuando la fecha de hoy (retornada por SYSDATE) es por lo menos el primer día de 2015; en otro caso, únicamente despliega el mensaje “Hola”. Aunque este bloque se ejecute en 2011, asigna memoria para la variable lcMensaje2.

Si reestructuramos este bloque, la memoria para lcMensaje2 será asignada únicamente después del 2015:

DECLARE
lcMensaje1  VARCHAR2(100) := ‘Hola’;
BEGIN
   IF SYSDATE > TO_DATE(’01/01/2015′)
THEN
      DECLARE
lcMensaje2  VARCHAR2(100) := ‘ RAHSUAREZ!’;
BEGIN
lcMensaje2 := lcMensaje1 || lcMensaje2;
DBMS_OUTPUT.put_line(lcMensaje2);
END;
   ELSE
DBMS_OUTPUT.put_line(lcMensaje1);
   END IF;
END;

De forma similar, podemos agregar una sección de excepciones a este bloque anidado, atrapando errores y permitiendo que el bloque exterior continúe con su ejecución:

DECLARE
lcMensaje1  VARCHAR2(100) := ‘Hola’;
BEGIN
   IF SYSDATE > TO_DATE(’01/01/2015′)
   THEN
      DECLARE
lcMensaje2  VARCHAR2(100) := ‘ RAHSUAREZ!’;
BEGIN
lcMensaje2 := lcMensaje1 || lcMensaje2;
DBMS_OUTPUT.put_line(lcMensaje2);
      EXCEPTION
      WHEN OTHERS
      THEN
DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
      END;
   ELSE
DBMS_OUTPUT.put_line(lcMensaje1);
   END IF;
END;

Bloques 002

 

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: