美文网首页
Oracle SQL 学习笔记29 - plsql编译

Oracle SQL 学习笔记29 - plsql编译

作者: 赵阳_c149 | 来源:发表于2020-02-20 20:32 被阅读0次

    PLSQL本地编译和解释编译

    compile.JPG

    本地编译的优势

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

    本地编译注意事项

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

    设置本地编译

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

    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 返回当前会话的全部告警字符。

    • 举例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;
    

    相关文章

      网友评论

          本文标题:Oracle SQL 学习笔记29 - plsql编译

          本文链接:https://www.haomeiwen.com/subject/zcadfhtx.html