PLSQL本地编译和解释编译
compile.JPG本地编译的优势
- 本地编译(10g)通用的makefile,使用了操作系统的以下软件:
- C compiler
- Linker
- Make utility
- (10g)生成了共享库,这些文件被拷贝到了文件系统中,并在runtime的时候导入
- 为计算密集型procedural操作提供了更好的性能(比解释快了30%)
- 不需要第三方c complier
本地编译注意事项
- PL/SQL的调试工具不能调试本地编译的代码
- 本地编译的代码比解释慢
- 由于操作系统在处理共享库的一些限制,大量本地编译的子程序会影响性能
设置本地编译
- 10g
PLSQL_NATIVE_LIBRARY_DIR = full-directory-path-name
PLSQL_NATIVE_LIBRARY_SUDIR_COUNT = count
ALTER SESSION SET PLSQL_COMPILER_FLAGS=Native
CREATE OR RECOMPILE plsql...
- 11gr2
ALTER SESSION SET PLSQL_COMPILER_FLAGS=Native
ALTER SYSTEM SET PLSQL_COMPILER_FLAGS=Native
CREATE OR ECOMPILE plsql subprogram
首先创建存储过程hello_native,然后设置
n_i_c.JPG
利用DBMS_WARNING影响编译告警
编译告警框架
在10g中,PL/SQL compiler得到了增强,可以为subprogram产生告警。
告警的级别的设定有两种方式:
- 可以在PLSQL_WARNING初始化参数中声明(declaratively)
-
使用DBMS_WARNINGS包以编程的方式声明(programmatically)
告警的级别被组织到三个类别里:servere,performance和informational。可以按照类别或者具体的信息开启和关闭告警。
告警信息举例:
warning_exam.JPG
使用DBMS_WARNING 包
DBMS_WARNING 包提供了一种编写程序的操作方式,以操作当前系统和会话的PL/SQL告警的行为。使用DBMS_WARNING 包,你可以:
- 查询既存的设置
- 为特定的需求修改设置,或者恢复原有的设置
- 删除设置
使用DBMS_WARNING函数
GET_CATEGORY(w_number) RETURN VARCHAR2
GET_WARNING_SETTING_CAT(w_category) RETURN VARCHAR2
GET_WARNING_SETTING_NUM(w_number) RETURN VARCHAR2
GET_WARNING_SETTING_STRING RETURN VARCHAR2
其中GET_CATEGORY根据消息码返回ALL、INFORMATIONAL、SEVERE或者PERFORMANCE的一种。
GET_WARNING_SETTING_CAT根据一个条目名,返回ENABLE、DISABLE或者ERROR的一种。
GET_WARNING_SETTING_STRING根据一个消息码,返回ENABLE、DISABLE或者ERROR的一种。
GET_WARNING_SETTING_STRING 返回当前会话的全部告警字符。
- 举例1 测试compile procedure
DECLARE
PROCEDURE print(s VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(s);
END;
BEGIN
print('Warning settings before: ' ||
DBMS_WARNING.GET_WARNING_SETTING_STRING);
compile('my_package');
print('Warning settings before: ' ||
DBMS_WARNING.GET_WARNING_SETTING_STRING);
END;
/
SHOW ERRORS PACKAGE MY_PACKAGE
- 举例2
保存当前告警设置,为PEFORMANCE 条目关闭告警,编译PL/SQL包,恢复最初的告警设置。
CREATE PROCEDURE complile(pkg_name VARCHAR2) IS
warn_value VARCHAR2(200);
compile_stmt VARCHAR2(200) := 'ALTER PACKAGE ' || pkg_name || ' COMPILE';
BEGIN
warn_value := DBMS_WARNING.GET_WARNING_SETTING_STRING;
DBMS_WARNING.ADD_WARNING_SETTING_CAT('PERFORMANCE', 'DISABLE', 'SESSION');
EXECUTE IMMEDIATE compile_stmt;
DBMS_WARNING.SET_WARNING_SETTING_STRING(warn_value, 'SESSION');
END;
网友评论