Oracle 11g Conditional Compilation / Compilación Condicional

Cuando trabajamos con diferentes ambientes de desarrollo, como dev, test, producción, tenemos la necesidad de avanzar funcionalidad en PLSQL en forma parcial, ya sea por que las tablas no existan en test o produccion, o por objetos no soportados por la base de datos; Puede darse el caso en que no sepamos la versión de la BD donde se instalara nuestro sistema y tenemos que agregar un soporte para X versión, pero como continuar desarollando sin tener diferentes versiones de código o diferentes archivos.


La solución es usar compilacion condicional en ingles (Conditional compilation), este un concepto agregado a pl/sql el cual nos permite compilar bloques de código dependiendo de una condición, dicha condición la podemos activar o desactivar cuando realizamos la compilación de nuestros packages o procedures.
Conditional compilation puede soportar las siguientes directivas para su uso:

  • PLSQL_CCFlags
  • PLSQL_Code_Type
  • PLSQL_Debug
  • PLSQL_Optimize_Level
  • PLSQL_Warnings
  • PLSQL_Unit
  • PLSQL_Line

Para verlo de forma sencilla solo usaremos  PLSQL_CCFlags que nos servira para declarar variables que evaluaremos con un $IF , y dependiendo de esto, el código dentro se compilara o no.
Veamos un ejemplo:
Declaramos nuestra variable (IS_PRODUCTION) con un alter y luego compilaremos el procedure usando esta variable.

El uso del símbolo de dólar es obligatorio para identificar la compilacion condicional, en este ejemplo indico que si la variable está declarada en TRUE, se compilara solo el código dentro del bloque true del IF,  para lo cual cuando ejecutemos deberíamos tener un resultado de 1.

Para verificar nuestra compilacion podemos usar dbms_preprocessor.print_post_processed_source
 que nos mostrara como esta compilado el codigo:

 Resultado, como vemos el codigo que se compilo fue del bloque TRUE:

 Ahora ejecutaremos el procedure para ver los resultados que tenemos:

 Y confirmamos que se ejecuto con el codigo 1:

Ahora haremos el  proceso inverso, colocando en false.

Podemos darle muchos usos al uso de la compilacion condicional (conditional compilation) , aqui les dejo algunas referencias y los links de acceso al codigo.

Código ejemplo: link

Referencias:

Published by Angel O. Flores Torres

System engineer, Applications engineer, working with C# and Oracle Apex 5, 5.1 since 2017. I specialize in Oracle APEX (Oracle Application Express )

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: