4

我的印象是,可以在函数名称后使用空括号调用无参数函数,即其他一些数据库允许这样做:

current_timestamp()

而在 Oracle 中,我必须写

current_timestamp

对于用户定义的函数,此规则不适用(在 11g 中)。我两个都可以写

my_function
my_function()

我的问题是:真的CURRENT_TIMESTAMP是一个真正的函数还是我应该将其视为 Oracle SQL 方言的语言构造/伪列(与 SQL 标准兼容)?关于何时可以(可选地,强制地)添加()以及何时必须省略它们,是否有任何正式定义?

背景信息:

  • SQL 1992定义:

    <current timestamp value function> ::=
      CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
    
  • Derby、HSQLDB、Ingres、Postgres、SQLite、SQL Server 的行为类似于 Oracle,其中不允许使用括号CURRENT_TIMESTAMP

  • Sybase SQL Anywhere 知道CURRENT TIMESTAMP函数(不带括号,不带下划线)
  • CUBRID、MySQL、Sybase ASE 允许使用CURRENT_TIMESTAMP()
4

1 回答 1

7

追溯到 1992 年的 SQL 标准将 CURRENT_TIMESTAMP 称为“时变系统变量”和“日期时间值函数”。例如,参见数据库语言 SQL

但是 AFAIK 标准总是使用 CURRENT_TIMESTAMP,而不是CURRENT_TIMESTAMP()。在兼容的 dbms 上使用 CURRENT_TIMESTAMP() 应该会失败并出现语法错误。

我不确定标准对用户定义的函数有什么看法。

于 2012-04-10T08:10:59.017 回答