2012-04-10 13 views
3

私はいくつかの他のデータベースを行うことができどのようなつまり、引数なしの関数は、関数名の後に空の括弧を呼び出すことができるという印象の下にあった:OracleのCURRENT_TIMESTAMP関数は実際に関数ですか?

current_timestamp() 

オラクルでは、私は

を記述する必要がありに対し
current_timestamp 

ユーザー定義関数では、この規則は適用されません(11g)。私は書くことができ、両方の

my_function 
my_function() 

私の質問は:は本当に本当の機能CURRENT_TIMESTAMPですか、私はそれが(SQL標準との互換性)のOracle SQL方言の言語構造/擬似列であることを考慮しなければなりませんか? ()をいつ追加することができますか(必須ではありません)、それを省略しなければならないときは正式な定義はありますか?

背景-情報:

  • SQL 1992は定義されています。

    <current timestamp value function> ::= 
        CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ] 
    
  • をダービー、HSQLDB、アングル、Postgresの、SQLiteの、SQL ServerはCURRENT_TIMESTAMPに許さ括弧がなけれオラクル、のように振る舞います

  • Sybase SQL Anywhereは、CURRENT TIMESTAMP関数(括弧なし、アンダースコアなし)を認識します
  • のSybase ASEが戻って1992からCURRENT_TIMESTAMP()
+0

FWIW select CURRENT_TIMESTAMP()はMSSQLの構文エラーです(つまり、CURRENT_TIMESTAMPのみが受け入れられます)。 – StuartLC

+0

@nonnb:はい、そうです。私はいくつかの背景情報で質問を更新します –

答えて

6

SQL標準を使用することができCUBRID、MySQLは、「時間的に変化するシステム変数」と「日時値関数」の両方としてCURRENT_TIMESTAMPを参照してください。例えば、Database Language SQLを参照されたい。

しかし、私の知る限り基準が常にCURRENT_TIMESTAMPを使用し、決して CURRENT_TIMESTAMP()。準拠したdbmsでCURRENT_TIMESTAMP()を使用すると、構文エラーで失敗するはずです。

ユーザー定義関数について標準が何を言いたいのか分かりません。

+1

'時変システム変数'は私が探していた用語です。素晴らしい、ヒントありがとう! –

関連する問題