Thursday, May 17, 2018

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:





























Share:

0 comentarios:

Post a Comment

Subscribe to my Newsletter

Acerca de mi:

img

Ing. Angel O. Flores Torres, soy Ingeniero de Sistemas e Ingeniero de Aplicaciones Oracle Apex, he trabajado con Oracle Apex 5 y 5.1 desde el 2017, En los ultimos años he desarrollado habilidades en CSS, JavaScript, Jquery y PlSql , I specialize in Oracle APEX (Oracle Application Express )

Followers

Popular Posts