4

引数のない関数は、関数名の後に空の括弧を付けて呼び出すことができるという印象を受けました。つまり、他のデータベースで実行できることです。

current_timestamp()

オラクルでは、私は書く必要があります

current_timestamp

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

my_function
my_function()

私の質問は次のとおりですCURRENT_TIMESTAMP。本当に真の関数なのか、それともOracle SQL方言の言語構造/疑似列(SQL標準と互換性がある)と見なす必要があるのでしょうか。()いつ(オプションで、強制的に)追加できるのか、いつそれらを省略しなければならないのかについての正式な定義はありますか?

背景情報:

  • SQL1992は次のように定義しています。

    <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、SybaseASEは使用を許可しますCURRENT_TIMESTAMP()
4

1 に答える 1

7

1992年までのSQL標準では、CURRENT_TIMESTAMPを「時変システム変数」と「日時値関数」の両方と呼んでいます。たとえば、データベース言語SQLを参照してください。

ただし、AFAIKの標準では、常にCURRENT_TIMESTAMPが使用され、 CURRENT_TIMESTAMP()は使用されません。準拠したdbmsでCURRENT_TIMESTAMP()を使用すると、構文エラーで失敗するはずです。

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

于 2012-04-10T08:10:59.017 に答える