Oracle APEX 应用程序包中匿名块的执行点

Posted

技术标签:

【中文标题】Oracle APEX 应用程序包中匿名块的执行点【英文标题】:Execution point of Anonymous blocks in package in Oracle APEX Applications 【发布时间】:2019-09-09 16:14:21 【问题描述】:

我从 ORACLE APEX 页面中的两个不同执行点调用同一个包的两个不同过程。这个包里面有匿名块。 (写在包体的最后)

执行点:加载时:“Body”区域之前。 调用:pkg_name.proc_1;

项目只读部分。 调用:pkg_name.proc_2

我已将日志记录到包中的匿名块中以检查其执行情况。我观察到它在页面渲染期间只执行一次。 但是在每次我调用包(通过动态操作)的页面渲染之后,匿名块被执行。

我在 oracle apex 中读到,每次调用 DB 时,它都会从池中获得一个新的 DB 连接。

匿名块如何在包中执行 --> 一次在数据库会话中或每次调用包时?

如果在数据库会话中出现一次,这是否意味着整个页面呈现发生在一个数据库会话中,这与动态操作不同?

请帮忙!

谢谢。

【问题讨论】:

包体中的匿名块被称为包的初始化部分。它通常在数据库会话中执行一次,即第一次调用包时。 docs.oracle.com/cd/E11882_01/appdev.112/e25519/… 谢谢。这很有帮助 【参考方案1】:

是的。所有渲染工作在页面交付到浏览器之前一起完成 - 因此包的匿名块的单次运行。但是每个 PL/SQL 动态操作都作为单独的 AJAX 请求执行,这意味着每个操作都连接到数据库并独立断开连接。

【讨论】:

准确总结我的问题的答案。页面的整个呈现发生在单个数据库会话中。所以匿名块只被调用一次。感谢澄清

以上是关于Oracle APEX 应用程序包中匿名块的执行点的主要内容,如果未能解决你的问题,请参考以下文章

oracle存储过程

从 apex 页面进程调用 pl/sql 函数

Oracle Apex:如何执行程序并在页面上显示结果

在 oracle apex 中使用保存点、提交和回滚

在 oracle apex 中使用 sqlerm 和异常时抛出重复的错误代码

为啥匿名块的最后一部分需要 BEGIN END(执行部分)?