Conditional compilation mit Oracle 10 und jünger

Bedingte Compilierung ist ein nettes Feature, um z.B. Debug- oder Test-Code aus einer Produktionsumgebung rauszuhalten, ohne den Quelltest zu duplizieren.

Oracle unterstützt dies seit der Version 10.2.

So gehts:

Die Befehle für Conditional Defines sind $IF, $THEN, $ELSE und $END. Die Variablen werden mittels $$ angesprochen, also z.B.

Create or replace Function foobar (v_para1 integer, 
                                   v_para2 integer) return integer 
is 
Begin
  $IF $$debug_flag $THEN
   dbms_output.put_line ('Calling foobar with ' || v_para1 || ', ' || v_para2);
  $END
  return v_para1 * v_para2;
End;

Spielt man diese Funktion ein und ruft sie anschliessend auf, so wird keine Ausgabe im Server-Output erscheinen.

Dies muss man durch

ALTER FUNCTION foobar COMPILE PLSQL_CCFLAGS = 'debug_flag:TRUE' REUSE SETTINGS;

aktivieren.

Dann gibt es beim Aufruf die erwartete Ausgabe.

Natürlich kann man den Conditional Define auch wieder zurücksetzen, so dass man keine Ausgabe mehr erhält.

ALTER FUNCTION foobar COMPILE PLSQL_CCFLAGS = 'debug_flag:FALSE' REUSE SETTINGS;