为什么调用 CURRENT_DATE
、CURRENT_TIMESTAMP
、SYSDATE
和 SYSTIMESTAMP
时不带括号。据我所知,它们不带参数,但在其他语言中,您仍然可以使用括号调用函数。 Oracle 中是否存在从不带参数的函数不能用括号调用的情况?
如果有人可以向我指出这方面的文档,我将不胜感激。
最佳答案
Oracle 在很多方面都很奇怪。它快速而宽松地处理了很多事情:NULL
的含义、隐式数据类型转换以及许多其他事情。
正如您所注意到的,其中之一是调用不带参数的函数的语法不一致。 (对于声明此类函数,也请参阅下文。)
诸如sysdate
和current_timestamp
之类的原生函数不带参数,必须编写时不带括号。您要求提供文档...最直接(但并不完全令人满意)的指针是每个函数的文档,其中语法显示得非常清楚没有括号。您在寻找什么 - 文档中单独提及,并明确说明了这一点?
将其与诸如 rownumber()
之类的分析函数进行比较,这些函数也不带参数。您必须将它们写成用空括号!
更糟糕的是:对于您在 PL/SQL 中自己编写的函数,并从 SQL 语句调用:如果函数不带参数,则必须不带括号来定义它。但是,当您调用它时(例如,在 select
语句中),您可以使用 或 <没有(空)括号 - 两种语法都是有效的。唉,对于像sysdate
这样的 native 函数来说,情况并非如此。为什么?这又是一个值得向 Oracle 提出的好问题。
事情还没有结束。 connect_by_root
是一个“分层函数”(可以在分层查询中使用的函数)。它需要一个参数 - 可以在括号中给出(就像在任何普通函数中一样)或不带括号!想想吧。
如果你问为什么??? - 你并不孤单。我也没有任何线索。
关于不带参数的 Oracle 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510805/