5 Replies Latest reply on Jun 28, 2013 3:13 PM by Jibba Jabba

    Conditional compilation: "If the $$id cannot be resolved to a value, then the PLW-6003 warning message is reported"

    Jibba Jabba


      So according to the documentation:


      Using Conditional Compilation Inquiry Directives

      The inquiry directive is used to check the compilation environment. The inquiry directive is of the form:

      inquiry_directive ::= $$id

      An inquiry directive can be predefined as described in "Using Predefined Inquiry Directives With Conditional Compilation" or be user-defined. The following describes the order of the processing flow when conditional compilation attempts to resolve an inquiry directive:

      1. The id is used as an inquiry directive in the form $$id for the search key.
      2. The two-pass algorithm proceeds as follows:The string in the PLSQL_CCFLAGS initialization parameter is scanned from right to left, searching with id for a matching name (case insensitive); done if found.The predefined inquiry directives are searched; done if found.
      3. If the $$id cannot be resolved to a value, then the PLW-6003 warning message is reported if the source text is not wrapped. The literal NULL is substituted as the value for undefined inquiry directives. Note that if the PL/SQL code is wrapped, then the warning message is disabled so that the undefined inquiry directive is not revealed.


      I take this to mean, if you do $IF $$XXX = 5 $THEN .. $END but have not defined $$XXX with "alter session set plsql_ccflags" then you should expect an error.

      But I am unable to make this trigger a warning or an error, either by


      alter session set plsql_warnings = 'error:06003';


      alter session set plsql_warnings = 'enable:all';


      test setup:


      SCOTT@ORCL> alter session set plsql_ccflags = '';
      Session altered.
      SCOTT@ORCL> alter session set plsql_warnings = 'enable:all', 'error:06003';
      Session altered.
          $IF $$DEBUGON $THEN
              dbms_output.put_line('debug is on');
              dbms_output.put_line('debug is NOT on');
              dbms_output.put_line('debug is neither on nor off - DEBUGON IS NOT SET!');
      show errors
      debug is neither on nor off - DEBUGON IS NOT SET!
      PL/SQL procedure successfully completed.
      No errors.


      I am missing something; it is late after all; thanks