【问题标题】:Is Oracle's CURRENT_TIMESTAMP function really a function?Oracle的CURRENT_TIMESTAMP函数真的是函数吗?
【发布时间】:2012-04-22 12:29:00
【问题描述】:

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

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

【问题讨论】:

  • FWIW select CURRENT_TIMESTAMP() 是 MSSQL 中的语法错误(即只接受普通的 CURRENT_TIMESTAMP)
  • @nonnb:是的,你是对的。我会用一些背景信息更新问题

标签: sql oracle function syntax


【解决方案1】:

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

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

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

【讨论】:

  • time-varying system variable 是我正在寻找的术语。太好了,谢谢你的提示!
猜你喜欢
  • 1970-01-01
  • 2016-02-28
  • 2016-10-17
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多