2012-04-10 104 views
3

我的印象是,争论少功能可与空括号函数名后调用,即什么样的一些其他数据库允许下做:Oracle的CURRENT_TIMESTAMP函数真的是一个函数吗?

current_timestamp() 

而在甲骨文,我必须写

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> ] 
    
  • 德比,HSQLDB,安格尔,Postgres的,SQLite的,SQL服务器的行为,如Oracle,那里没有允许CURRENT_TIMESTAMP括号

  • Sybase SQL Anywhere知道CURRENT TIMESTAMP函数(没有括号,没有下划线)
  • CUBRID,MySQL和Sybase ASE的允许使用CURRENT_TIMESTAMP()
+0

FWIW select CURRENT_TIMESTAMP()是MSSQL中的语法错误(即只有普通的CURRENT_TIMESTAMP是可接受的) – StuartLC 2012-04-10 07:48:33

+0

@nonnb:是的,你说得对。我会用一些背景信息更新这个问题 – 2012-04-10 07:57:17

回答

6

SQL标准回到1992指CURRENT_TIMESTAMP既作为“随时间变化的系统变量”和“日期时间值函数”。例如参见Database Language SQL

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

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

+1

'时变系统变量'是我一直在寻找的术语。太好了,谢谢你的提示! – 2012-04-10 08:33:45