17.10 - CREATE FUNCTIONおよびREPLACE FUNCTION構文要素(外部形式) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-171K-JPN
Language
日本語 (日本)
database_name_1
user_name_1
デフォルト以外のデータベースまたはユーザーで関数を作成または置換する場合に指定する、オプションのデータベース名またはユーザー名。
推奨されているSYSLIBデータベースをUDFの格納先として使用する場合は、その永久領域のサイズを変更し、それに対して適切な権限を付与する必要があります。これは、そのデータベースが永久領域0、アクセス権限なしで作成されているためです。
すべての行レベル セキュリティ ポリシー関数は、SYSLIBデータベースに常駐している必要があります。
UDTのキャスト、順序付け、またはデータ変換ルーチンとして使用される外部UDFを、SYSUDTLIBデータベースに作成する必要があります。
データベース名を指定しない場合、システムは現行データベース内で関数を作成または置換します。
function_name
関数の呼び出し名。
この句はすべてのUDFで必須です。
関数名の長さは最大30文字です。
function_nameを使用して関数を識別する場合は、その関数が作成されたプログラミング言語の識別子命名ルールに従うように気をつけてください。
名前を二重引用符(U+0022)で囲まない限り、既存のVantage提供の関数(固有関数とも呼ばれる)と同じ名前をUDFに指定することはできません。 例えば、“TRIM”()などです。 UDFに固有関数の名前を指定することは、望ましくないプログラミング手法なので避けてください。
UDTと、パラメータなしでSYSUDTLIBに格納されているUDFは、同じ名前を持つことができません。
名前にマルチバイト文字を含むオブジェクトがデータベースのUDFライブラリにある場合、新規オブジェクト名に1バイト文字のみが含まれる場合でも、シングルバイトのセッション文字セットを使用して、新たなUDF、UDT、メソッド、またはJavaストアド プロシージャのオブジェクトを作成することはできません。その他の場合は、要求元にエラーが返されます。代わりにマルチバイトのセッション文字セットを使用します。
specific_function_nameまたはexternal_function_nameを指定しない場合、function_nameはC、C++、またはJava関数名のスペルと文字の大小に正確に一致している必要があります。このルールは関数の定義のみに該当し、呼び出しには該当しません。
行レベル セキュリティ ポリシーUDF、およびTD_VALISTデータ型を指定する入力パラメータを含むXMLドメイン固有の関数を除き、SQLでは同じ関数クラス内の関数名のオーバーロードがサポートされているため、function_nameはそのクラス内で固有である必要はありません。ただし、同じデータベースまたはユーザー内のスカラー関数と集約関数の両方に同じ名前を付けることはできません。
行レベル セキュリティ適用UDFでは、関数名オーバーロードはサポートされていません。UDFの入力としてVantageではパラメータ型を必要とするので、特定のステートメント アクションのセキュリティ ポリシーを実行する各UDFのパラメータの数とデータ型が同じでなければなりません。セキュリティ ポリシーを実行する各UDFのパラメータで許容される唯一の違いは、制約でNULLが認められているかどうかに応じて、それぞれのUDFのパラメータにNULL標識を組み込むか省略するかという違いです。
同じクラス内で同じfunction_nameを持つ別々の関数の識別には、パラメータのデータ型とパラメータの数が使用されます。
関数のオーバーロードの詳細については、<Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147>を参照してください。
COMPRESS
このUDFは、データのアルゴリズム圧縮に使用されます。
データの圧縮と圧縮解除に同一のUDFを使用することはできません。
DECOMPRESS
compress_UDF_name という名前のUDFを使用してアルゴリズム圧縮したデータを、圧縮解除するためにUDFを使用することを指定します。
データの圧縮解除と圧縮に同一のUDFを使用することはできません。
GLOP_set_name
この関数が関連付けられたGLOPセットの名前。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
指定したGLOPセットが、関数を作成している時点で存在している必要はありません。
この句は、RETURNS句とEXTERNAL句の間の任意の場所に指定できます。
EXTERNAL
必須の外部関数本体の参照句を示します。
この句はすべてのUDFで必須です。
この句によって、以下の4種類の指定ができます。
  • キーワードEXTERNALのみ。
  • キーワードEXTERNAL NAMEおよび外部関数名(オプションのパラメータ形式の指定あり)。

    これはすべてのUDFの必須属性です。

  • キーワードEXTERNAL NAMEおよび外部文字列リテラルのセット。
  • キーワードEXTERNAL NAMEおよびJava JAR IDの指定。
external_function_name
関数オブジェクトのエントリ ポイント。
オブジェクト名の長さの制限についての詳細は、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
文字の大小は有意であり、C、C++、またはJava関数名と一致していなければなりません。
EXTERNAL SECURITY
外部セキュリティ句の前に指定するキーワード。
オペレーティング システムI/O操作を実行するUDFには、この句の使用が推奨されます。これにより、関数を実行する特定のOSユーザーを指定できるためです。この句を使用しないと、汎用ユーザーtdatuserで保護モードのUDFが実行されます。
<CREATE AUTHORIZATIONおよびREPLACE AUTHORIZATION>も参照してください。
DEFINER
UDFが、この目的で作成された関連するセキュリティ許可オブジェクトのクライアント ユーザー コンテキストで実行します。このオブジェクトはプロシージャと同じデータベースに含まれています。
  • 許可名を指定する場合、プロシージャを呼び出す前にその名前で許可オブジェクトを定義する必要があります。
  • 許可名を指定しない場合は、デフォルトのDEFINER許可オブジェクトを定義する必要があります。
デフォルトの許可オブジェクトは、ユーザーがプロシージャを実行する前に定義しておく必要があります。
指定された許可名がプロシージャの作成時に存在しない場合は、許可名が存在しないことを示す警告がVantageより報告されます。
それでもプロシージャを実行しようとすると、リクエストはアボートし、システムは要求元にエラーを返します。
authorization_name
このDEFINERの任意指定の識別子を指定します。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
CREATE AUTHORIZATIONおよびREPLACE AUTHORIZATIONを参照してください。
INVOKER
関数は、その関数を実行するログオン ユーザーに関連付けられているINVOKER許可を使用して実行します。
CREATE AUTHORIZATIONおよびREPLACE AUTHORIZATIONを参照してください。