按照解释编译存储过程

时间:2018-12-29 21:01:50

标签: sql oracle plsql

在阅读一本PLSQL书时,我偶然发现了这段代码:

ALTER PROCEDURE pls_test COMPILE PLSQL_CODE_TYPE=INTERPRETED; 

能否请您解释一下它与普通编译有何不同?我在书中找不到答案。

谢谢!

2 个答案:

答案 0 :(得分:0)

以下描述总结了本机编译与解释编译。解释编译是Oracle DB上的默认编译。本机编译的代码无需在运行时进行解释,因此执行速度更快。

  

本机编译是存储PL / SQL程序的过程   编译成不需要的本机代码(Pro * C)   在运行时解释。相比之下,非本地代码   编译以中间形式存储,该中间形式必须在   运行时。

     

PL / SQL本机编译可最大程度地提高性能   计算密集型程序操作。

参考:[1] [2]

答案 1 :(得分:0)

Oracle支持两种不同的编译模式:INTERPRETED和NATIVE。

INTERPRETED 是默认模式,与存储的PL / SQL(Oracle 7)同时引入:

  

...每个PL / SQL程序单元都被编译成中间形式的机器可读代码(MCode)。 MCode存储在数据库字典中,并在运行时进行解释

在您显示的代码中,INTERPRETED部分是多余的,因为它对应于默认的编译模式(除非在默认值已更改的服务器上执行该命令)。

NATIVE 在Oracle 9中引入,然后在以下版本中得到增强和简化:

  

SQL模块(包,触发器,过程,函数和类型)..被编译为共享库中的本机代码。这些过程被转换为C代码,然后使用C编译器进行编译,并动态链接到Oracle进程中。

这将缩短执行时间,因为在运行时无需解释:在Oracle 10g中,预测的改进因子从1.04到2.4。

结论:除非有充分的理由,否则您要使用NATIVE而不是INTERPRETED ...

有关更多详细信息和可能的迁移路径,请阅读this Oracle 10g FAQ paperthis post on Oracle blog