PL/SQL中的条件编译(Conditional Compilation)
条件编译可以依据编译指示符来选择要编译的代码。比如:可以有开发时,在代码中插出调试、跟踪信息;在发布时,指定不同的编译指示符,生成不含调试、跟踪信息的代码。
★条件编译如何工作?
☆条件编译的控制标记(Control Token)
$if $then $else $elsif $end $error
☆条件编译的选择指示符(Selection Directives)
形式为:
$IF boolean_static_expression $THEN text
[ $ELSIF boolean_static_expression $THEN text ]
[ $ELSE text ]
$END
其中boolean_static_expression必须为BOOLEAN型的常量表达式。
☆条件编译的错误指示符(Error Directives)
形式为:
$error varchar2_static_expression $end
其中varchar2_static_expression必须为varchar2型的常量。
☆条件编译的询问指示符(Inquiry Directives)
形式为:
inquiry_directive ::= $id
询问指示符可以是预定义(Predefined Inquiry Directive)的,也可以是用户定义(User Defined Directive)的。
查询顺序:
从plsql_ccflags参数中从右往左找,如找到,则停止查找。
从预定义的查询指示符中查找,如找到,则停止查找。
☆预定义的询问指示符(Predefined Inquiry Directives)
预定义的询问指示符包括:
plsql_ccflags
plsql_optimize_level
plsql_code_type
plsql_warnings
plsql_debug
nls_length_semantics
$$plsql_line表示当前的代码行
$$plsql_unit表示当前的编译的单元名称
☆在条件编译中,使用静态表达式(Static Expressions)
静态变量包括BOOLEAN型,PLS_INTEGER型,及VARCHAR2型。
☆设置PLSQL_CCFLAGS初始化参数
alter session set plsql_ccflags = 'c1:v1,c2:v2,...,cn:vn';
☆使用DBMS_DB_VERSION包常量
可以检测当前的数据据VERSION及RELEASE。
★条件编译示例
☆使用条件编译为不同数据库版本指定代码
☆使用DBMS_PREPROCESSOR打印或获取预处理后的源代码
★条件编译限制
参考资料:
b14261.PLSQL User's Guide and Reference.Oracle 10g
Conditional Compilation
b14258.PLSQL Packages and Types Reference.Oracle 10g
DBMS_DB_VERSION
DBMS_PREPROCESSOR
PLSQL_CCFLAGS
PLSQL高级应用之条件编译