ORACLE PL/SQL是如何运行的

PL/SQL 引擎[PL/SQL engine]是用户定义,编译,及运行 PL/SQL 程序单元的工具。

 

图中 显示了应用程序向 Oracle 数据库发送了一个过程调用。PL/SQL 过程在 SGA 中运行,SGA 将过程发送给 PL/SQL 引擎,而引擎则将 SQL 发送给 SQL 语句执行器。

PL/SQL 程序单元存储于数据库中。当应用程序调用存储于数据库内的存储过程时,Oracle 将经过编译的程序单元加载到位于系统全局区[system global area,SGA]的共享池[shared pool]内。PL/SQL 语句执行器[PL/SQL statement executor]和 SQL 语句执行器[SQL statement executor]协同工作,共同处理程序单元内的所有语句。

 

匿名 PL/SQL 块与存储过程的比较:

存储过程在创建后作为方案对象存储在数据库中。一旦存储过程被创建并编译后,就成为一个命名的对象,可以重复执行而无需再次编译。此外,与存储过程相关的依赖性信息也将被保存在数据字典中,以确保 过程的有效性。

Oracle 编译 PL/SQL 块,并将编译结果存储在 SGA 的共享池内[shared pool],但匿名 PL/SQL 块不会以编译后的形式存储于数据库内,当实例关闭后则无法重用。利用 Oracle 的共享 SQL 技术[Shared SQL],共享池内的匿名 PL/SQL 块在被清除出共享池之前可以被重用。将数据库应用程序中的 PL/SQL 块改写为存储过程,存储到数据库或内存中,可以避免过程运行时 Oracle 进行不必要的重复编译工作,从而提升应用程序及 Oracle 的整体性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值