Oracle的CURRENT_TIMESTAMP功能真的是一个功能吗?

时间:2012-04-10 07:43:31

标签: sql oracle function syntax

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

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()

1 个答案:

答案 0 :(得分:7)

回溯到1992年的SQL标准将CURRENT_TIMESTAMP称为“时变系统变量”和“日期时间值函数”。例如,请参阅Database Language SQL

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

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