0

0

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

php中文网

php中文网

发布时间:2016-06-07 16:49:05

|

1022人浏览过

|

来源于php中文网

原创

Oracle环境中,PL/SQL是我们进行业务逻辑实现的最佳手段,同时也是和Oracle数据库本身结合的最好的语言。使用好PL/SQL本身功能,

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

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

 

Eclipse下的Android
Eclipse下的Android

本文档主要讲述的是Eclipse下的Android-NDK安装;Android NDK 是运行于Android 平台上的Native Development Kit 的缩写。Android 应用开发者可以通过NDK 调用C 或C++ 本地代码。NDK 编译需要用到Cygwin 中的make 和gcc, 所以先来下载并安装Cygwin。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载

相关阅读:

rlwrap - 解决Linux下SQLPLUS退格、上翻键乱码问题

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

 

 

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

11

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

6

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

1

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

2

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

1

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

53

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

25

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

31

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.7万人学习

SQL优化与排查(MySQL版)
SQL优化与排查(MySQL版)

共26课时 | 2.3万人学习

MySQL索引优化解决方案
MySQL索引优化解决方案

共23课时 | 2.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号