当前位置:  数据库>oracle

Oracle 11g中的Native PL/SQL代码编译

    来源: 互联网  发布时间:2017-06-04

    本文导语: Oracle环境中,PL/SQL是我们进行业务逻辑实现的最佳手段,同时也是和Oracle数据库本身结合的最好的语言。使用好PL/SQL本身功能,可以大幅度提高我们的工作效率。 我们从最开始学习计算机和编程开始,就接触到一个概念叫做“...

Oracle环境中,PL/SQL是我们进行业务逻辑实现的最佳手段,同时也是和Oracle数据库本身结合的最好的语言。使用好PL/SQL本身功能,可以大幅度提高我们的工作效率。
 
我们从最开始学习计算机和编程开始,就接触到一个概念叫做“二进制程序码”。计算机可以直接进行二进制代码的执行,就目前而言,二进制是计算机执行速度最快的一种形式。其他的高级语言,如C、C++,都是通过编译Compile和连接Link过程,转化为二进制程序。
 
二进制程序的特点是执行速度快。但是缺点也是明显的,那就是针对一种物理机器类型(如CPU架构)、一种操作系统,二进制执行程序的格式定义都是不同的。所以,针对每一种操作系统和物理平台,理论上我们都需要进行一遍Compile和Link过程,形成独特的可执行程序。
 
中立语言,或者称为中间语言的出现,结束了这样的局面。这种代表性就是Java和诸多的脚本语言,借助一个“平台相关”的虚拟机软件,我们可以让相同的代码在不同平台上运行。这也就是所谓的“一次编译,多处执行”。
 
默认情况下,PL/SQL代码就是这样的中间语言,也可以称为解释语言。在不同的平台上,相同的代码在运行。相对于Native代码而言,解析代码的性能一直是人们关注的重要问题。将代码Native本地化,是人们经常提到的一种程序优化手段。
 

--------------------------------------分割线 --------------------------------------

 

相关阅读:

SQLPLUS spool 到动态日志文件名

Oracle SQLPLUS提示符设置

通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

--------------------------------------分割线 --------------------------------------

1、PL/SQL语句Native化

 

PL/SQL语句的Native化,是从Oracle9i引入的。最开始进行native的初衷就是性能,通常native的PL/SQL代码要比解释形式(interpreted form)执行速度快。早期的native化是比较费力气的,需要我们提供出本地的编译器地址。
 
PL/SQL语句的native过程需要我们安装额外的C编译器,这个在一些生产环境下,还是有安全方面的顾虑的。

在9i和10g时代,数据库中包括一个参数名为plsql_native_library_dir,用于指定本地的编译器目录位置。在11g中,这个参数被取消,进行代码native的过程也变得比较简单起来。
 
在11g中,Oracle是不需要服务器上额外安装C编译器的。Oracle会直接将需要native化的PL/SQL代码转化到服务器上的shared library(DDL)。由此,进行PL/SQL的本地编译就变得很简单,只需要一个开关设备。这个就是Oracle参数plsql_code_type。
 
在使用native PL/SQL的时候,我们一定注意使用内存对象的不同。Native PL/SQL代码对应的机器码(machine code)在被调入数据库catalog之前,是与PGA内存进行映射。而解释代码(interpreted form code)则是和SGA进行对应。所以,在使用native code的时候,对SGA的消耗是减少的趋势。
 
 

2、开关参数plsql_code_type

 

从Oracle 11g开始,我们可以使用plsql_code_type来控制编译器选择开关。我们选择Oracle11g进行实验。

 

 

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------
 
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE        11.2.0.3.0        Production

 

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 – Production

 

 

相关参数

 

 

SQL> show parameter plsql_code

NAME                                TYPE        VALUE

------------------------------------ ----------- ------------------------------

plsql_code_type                      string      INTERPRETED

 

 

默认情况下,Oracle是选择解释代码的形式进行编译的。通过视图user/all/dba_plsql_object_settings,我们是可以看到对应存储代码对象使用的编译形式的。
 
首先,我们使用默认方式进行存储过程编译。

 

 

SQL> create or replace procedure P_RECE_CALL_TEST is

  2  i number;

  3  c number;

  4  begin

  5    for i in 1..100 loop

  6        select count(*) into c from emp;

  7        dbms_output.put_line(to_char(c));

  8    end loop;

  9  end P_RECE_CALL_TEST;

 10  /

 

Procedure created

 

SQL> select name, plsql_code_type from user_plsql_object_settings;

 

NAME                          PLSQL_CODE_TYPE

------------------------------ --------------------

P_RECE_CALL_TEST              INTERPRETED

 

 

代码对象的plsql_code_type列显示了对象的编译形式。我们对于单独的存储过程,可以不通过参数修改,而是在compile过程中,直接指定编译方式。这样也是可以将代码编译为native方式。
 
 

 

SQL> alter procedure p_rece_call_test compile plsql_code_type=native;

Procedure altered

 

SQL> select name, plsql_code_type from user_plsql_object_settings;

NAME                          PLSQL_CODE_TYPE

------------------------------ --------------------

P_RECE_CALL_TEST              NATIVE

 

 

配置参数plsql_code_type比较简单,目前版本Oracle支持Interpreted和Native两个选项值。默认取值为Interpreted,表示将程序代码编译为解析形式。另一个就是Native,表示编译为本地代码。我们可以在session level进行灵活的配置。
 
 

 

SQL> alter session set plsql_code_type='native';

Session altered

 

SQL> alter procedure p_rece_call_test compile;

Procedure altered

 

SQL>  select name, plsql_code_type from user_plsql_object_settings;

 

NAME                          PLSQL_CODE_TYPE

------------------------------ --------------------

P_RECE_CALL_TEST              NATIVE

 

 

重新登录之后,可以将其编译回解释状态。

 

 

SQL> conn scott/tiger@ora11g;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

Connected as scott

 

SQL> alter procedure p_rece_call_test compile;

Procedure altered

 

SQL>  select name, plsql_code_type from user_plsql_object_settings;

NAME                          PLSQL_CODE_TYPE

------------------------------ --------------------

P_RECE_CALL_TEST              INTERPRETED

 
更多详情见请继续阅读下一页的精彩内容:


    
 
 

您可能感兴趣的文章:

  • 为什么在编译java程序的时候出现oracle.jdbc.driver不存在?急!!!
  • 用Jbuilder编译文件,提示找不到oracle驱动?
  • ser 2.1.0下oracle模块编译错误,请指点
  • Oracle 9.2.0.1版函数编译一个小问题
  • Oracle中重新编译无效的存储过程, 或函数、触发器等对象
  • Linux+php+apache+oracle环境搭建之CentOS下源码编译安装PHP
  • oracle 创建表空间步骤代码
  • 请问在 Linux 下如何用代码实现连接oracle数据库 并 执行 SQL 语句?
  • Oracle E-Business套件多个认证绕过及代码注入漏洞
  • Linux下Oracle归档日志自动清理脚本代码(sh)
  • ProC 连接Oracle代码
  • oracle查看会话锁定的所有对象代码分享
  • Oracle SQL中实现indexOf和lastIndexOf功能的思路及代码
  • 怎样在c语言的代码里内嵌的操作oracle数据库,各位大虾谢谢了
  • Linux oracle数据库自动备份自动压缩脚本代码
  • linux下用什么办法连接oracle数据库并且读取数据呢?(用c++代码实现时)
  • oracle命令行删除与创建用户的代码
  • oracle下实现恢复一个丢失的数据文件的代码
  • 谁有oracle存储过程的原代码?谢谢!
  • Java 获得Oracle 的错误代码
  • 那位兄弟给段代码:连接Oracle数据库的。
  • php连接oracle数据库的示例代码
  • Oracle向Linux kernel加入数据完整性代码
  • 在oracle下要在同一事务下插入多条记录,该怎么做??最好要有原代码
  • 论坛 iis7站长之家
  • oracle代码的常见错误汇总
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,