在阅读一本PLSQL书时,我偶然发现了这段代码:
ALTER PROCEDURE pls_test COMPILE PLSQL_CODE_TYPE=INTERPRETED;
能否请您解释一下它与普通编译有何不同?我在书中找不到答案。
谢谢!
答案 0 :(得分:0)
以下描述总结了本机编译与解释编译。解释编译是Oracle DB上的默认编译。本机编译的代码无需在运行时进行解释,因此执行速度更快。
本机编译是存储PL / SQL程序的过程 编译成不需要的本机代码(Pro * C) 在运行时解释。相比之下,非本地代码 编译以中间形式存储,该中间形式必须在 运行时。
PL / SQL本机编译可最大程度地提高性能 计算密集型程序操作。
答案 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 paper和this post on Oracle blog。