一尘不染

Oracle的CURRENT_TIMESTAMP函数真的是一个函数吗?

sql

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

current_timestamp()

而在Oracle中,我必须写

current_timestamp

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

my_function
my_function()

我的问题是:
CURRENT_TIMESTAMP真是名副其实的功能或者我应该认为它是在Oracle
SQL方言(SQL标准兼容)的语言结构/伪列?关于何时可以(可选地)强制添加()和何时必须省略它们有任何正式的定义吗?

背景信息:

  • SQL 1992定义:

    <current timestamp value function> ::=
    

    CURRENT_TIMESTAMP [ ]

  • Derby,HSQLDB,Ingres,Postgres,SQLite,SQL Server的行为类似于Oracle,其中不允许使用括号 CURRENT_TIMESTAMP

  • Sybase SQL Anywhere知道一个CURRENT TIMESTAMP函数(不带括号,不带下划线)

  • CUBRID,MySQL,Sybase ASE允许使用 CURRENT_TIMESTAMP()

阅读 191

收藏
2021-05-30

共1个答案

一尘不染

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

但据我所知标准一直使用CURRENT_TIMESTAMP, 从来没有
CURRENT_TIMESTAMP()。在兼容的dbms上使用CURRENT_TIMESTAMP()应该失败,并出现语法错误。

我不确定用户定义函数的标准是什么。

2021-05-30