関数名のオーバーロード - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

関数名は、関数クラス内で固有である必要はありません。ただし、同じデータベースまたはユーザー内で2つの異なる関数クラスの関数に、同じ名前を指定することはできません。Teradata Databaseは同じ名前の関数のパラメータ型を使用することによりそれらを区別するので、明確に区別するためには、オーバーロード関数名に関連するパラメータ型が十分に異なったものであることが重要です。

同じ名前の複数の関数をパラメータ データ型で区別する必要がある場合、システムは互換性のあるデータ型のパラメータの優先順位に基づいて、呼び出す関数を判別します。

Teradata Databaseはパラメータのルールのセットを使用して、関数名が固有であるかどうかを判別します。以下のリストで、そのルールを示します。

  • 以下の数値パラメータ データ型は、関数が固有であるかどうかを判別するための優先順位に従ってリストされています。たとえば、BYTEINTはSMALLINT内に収まり、SMALLINTはINTEGER内に収まります。反対に、FLOATをINTEGER内に収めようとすると、情報が失われる可能性があります。
    これらのデータ型は別個のものですが、互換性があります。1つの数字を共有する複数のデータ型は同義語であり、互いに別個のものではありません。
    • BYTEINT
    • SMALLINT
    • INTEGER
    • DECIMAL
NUMERIC

      データ型DECIMALとNUMERICのサイズ指定は、関数が別個のものであるかどうかに影響しません。たとえば、DECIMAL(8,3)とDECIMAL(6,2)は、関数が固有であるかどうかに関して同じ意味を持ちます。

    • FLOAT, DOUBLEPRECISION, REAL
  • 以下の文字パラメータ データ型は、関数が固有であるかどうかを判別するための優先順位に従ってリストされています。
    これらのデータ型は別個のものですが、互換性があります。1つの文字を共有する複数のデータ型は同義語であり、互いに別個のものではありません。文字列の長さ指定は、関数が別個のものであるかどうかに影響しません。たとえば、CHARACTER(10)とCHARACTER(5)は、関数が固有であるかどうかに関して同じ意味を持ちます。また、CHARACTER SET句は、関数の固有性の判別について影響がありません。
    • CHARACTER
    • VARCHAR, CHARACTERVARYING, LONGVARCHAR
    • CHARACTER LARGE OBJECT
  • 以下のグラフィック パラメータ データ型は別個のものですが、互換性があります。1つの箇条書きで書かれている複数のデータ型は同義語であり、互いに別個のものではありません。
    • GRAPHIC
    • VARGRAPHIC
LONG VARCHAR CHARACTER SET GRAPHIC
  • 以下のバイト パラメータ データ型は別個のものですが、互換性があります。
    • BYTE
    • VARBYTE
    • BINARY LARGE OBJECT
  • 日付、時刻、タイムスタンプ、間隔のパラメータ データ型はすべて別個のものです。
  • 同名の既存の関数のパラメータ数が異なっているか、または1つ以上のパラメータで関数パラメータ データ型が互いに異なる場合、定義する関数は固有と見なされます。
  • 複数の関数に同じfunction_nameがある場合は、
specific_function_nameを入力する必要があります。
  • 関数名のオーバーロードは、1つのデータベース内の同一のクラス内でのみ可能です。例えば、同じデータベース内にあるスカラー関数と集約関数とに同一のfunction_nameを指定することはできません。