不带参数的 Oracle 函数

标签 oracle function

为什么调用 CURRENT_DATECURRENT_TIMESTAMPSYSDATESYSTIMESTAMP 时不带括号。据我所知,它们不带参数,但在其他语言中,您仍然可以使用括号调用函数。 Oracle 中是否存在从不带参数的函数不能用括号调用的情况?

如果有人可以向我指出这方面的文档,我将不胜感激。

最佳答案

Oracle 在很多方面都很奇怪。它快速而宽松地处理了很多事情:NULL 的含义、隐式数据类型转换以及许多其他事情。

正如您所注意到的,其中之一是调用不带参数的函数的语法不一致。 (对于声明此类函数,也请参阅下文。)

诸如sysdatecurrent_timestamp之类的原生函数不带参数,必须编写时不带括号。您要求提供文档...最直接(但并不完全令人满意)的指针是每个函数的文档,其中语法显示得非常清楚没有括号。您在寻找什么 - 文档中单独提及,并明确说明了这一点?

将其与诸如 rownumber() 之类的分析函数进行比较,这些函数也不带参数。您必须将它们写成空括号!

更糟糕的是:对于您在 PL/SQL 中自己编写的函数,并从 SQL 语句调用:如果函数不带参数,则必须不带括号来定义它。但是,当您调用它时(例如,在 select 语句中),您可以使用 <没有(空)括号 - 两种语法都是有效的。唉,对于像sysdate这样的 native 函数来说,情况并非如此。为什么?这又是一个值得向 Oracle 提出的好问题。

事情还没有结束。 connect_by_root 是一个“分层函数”(可以在分层查询中使用的函数)。它需要一个参数 - 可以在括号中给出(就像在任何普通函数中一样)或不带括号!想想吧。

如果你问为什么??? - 你并不孤单。我也没有任何线索。

关于不带参数的 Oracle 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510805/

相关文章:

sql - PL SQL - 将时间戳转换为日期时间/日期

mysql - 属性和使用 ALTER 创建的列之间的区别?

python - 如何将函数或运算符作为参数传递给 Python 中的函数?

jquery - 嵌套函数按顺序运行

vb.net - 我如何解决错误 ORA-06413 : Connection not open?

oracle - 安装 ORDS(没有 APEX)

sql - 一些语法错误 - 无法弄清楚在哪里

function - 从 PowerShell 中的另一个函数调用一个函数

javascript - 除非我在函数中定义变量,否则传递变量不起作用

作为函数调用的 PHP 类