使用`SELECT`来调用一个函数

Bob*_*ica 10 oracle plsql

我偶尔会遇到SELECT...INTO...FROM DUAL用于调用函数的示例- 例如:

SELECT some_function INTO a_variable FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

使用,而不是

a_variable := some_function;
Run Code Online (Sandbox Code Playgroud)

我对此的看法是,这不是一个好的做法,因为A)它不清楚是否正在调用一个函数,而B)它的效率很低,因为它强制从PL/SQL引擎转换到SQL引擎(可能不是一个今天发行).

任何人都可以解释为什么这可能已经完成,例如,为了调用函数,这在早期的PL/SQL编码中是否必要?我正在查看的代码可能早于Oracle 8.

任何见解都表示赞赏.

小智 4

这种做法可以追溯到PLSQL 和 Oracle 7之前。正如已经提到的,在 Oracle7 中可以进行分配(当然也是最佳实践)。

在 Oracle 7 之前,有两个广泛使用的工具需要使用Select ... into var from Dual;

一方面,曾经有一个名为 RPT 的 Oracle 工具,是某种报告生成器。RPT 可用于创建批处理过程。它有两种宏,可以组合起来实现我们今天使用 PLSQL 的目的。我的第一份 Oracle 工作涉及调试 PLSQL,该程序是由一个程序生成的,该程序采用 RPT 批处理并将它们自动转换为 PLSQL。2000 年之后不久,我扔掉了我唯一的一本 RPT 手册。

另一方面,有 Oracle Forms 2.x 及其菜单组件。Oracle Menu 中的上下文切换通常通过Select ... from Dual 来完成;我还记得当我发现一个难以处理的Bug是由表Dual中总共6条记录引起的时,我是多么自豪。

很遗憾,我无法证明这一点,但现在是一年中回想过去的时候,找到答案真的很有趣。