Oracle SQL 学习笔记29 - plsql编译

2020-02-20  本文已影响0人  赵阳_c149

PLSQL本地编译和解释编译

compile.JPG

本地编译的优势

  1. 本地编译(10g)通用的makefile,使用了操作系统的以下软件:
  1. (10g)生成了共享库,这些文件被拷贝到了文件系统中,并在runtime的时候导入
  2. 为计算密集型procedural操作提供了更好的性能(比解释快了30%)
  3. 不需要第三方c complier

本地编译注意事项

  1. PL/SQL的调试工具不能调试本地编译的代码
  2. 本地编译的代码比解释慢
  3. 由于操作系统在处理共享库的一些限制,大量本地编译的子程序会影响性能

设置本地编译

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...
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产生告警。
告警的级别的设定有两种方式:

  1. 可以在PLSQL_WARNING初始化参数中声明(declaratively)
  2. 使用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 返回当前会话的全部告警字符。

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
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;
上一篇下一篇

猜你喜欢

热点阅读