SQL 解説書
このステートメントは、すでにユーザー定義の構造タイプの定義の一部となっているメソッド指定に、
メソッド本体を関連付けるために使用されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むか、
または動的 SQL ステートメントを使用して発行することができます。
このステートメントは、動的に準備可能な実行可能ステートメントです。
しかし、バインド・オプション DYNAMICRULES BIND を適用する場合、
ステートメントを動的に準備することはできません (SQLSTATE 42509)。
許可
このステートメントの許可 ID には、以下の特権が少なくとも 1 つ含まれている必要があります。
- SYSADM または DBADM 権限
- CREATE METHOD で参照される構造タイプのスキーマに対する CREATEIN 特権
- CREATE METHOD ステートメントで参照される構造タイプの DEFINER
このステートメントの許可 ID に SYSADM 権限または DBADM 権限がなく、
メソッドが RETURN ステートメントで表または視点を指定する場合、
ステートメントの権限 ID が持つ特権 (グループ特権は考慮に入れない) には、
識別される表および視点それぞれに対する SELECT WITH GRANT OPTION が組み込まれていなければなりません。
許可 ID の権限が不十分で、操作を実行できない場合には、エラーになります (SQLSTATE 42502)。
構文
>>-CREATE------------------------------------------------------->
>-----+-METHOD--+-method-name----------+---FOR--type-name--+---->
| '-| method-signature |-' |
'-SPECIFIC METHOD--specific-name---------------------'
>-----+-*----EXTERNAL--+-----------------------+--*----+------------------------------+--*--+>
| '-NAME--+-'string'---+--' '-TRANSFORM GROUP--group-name--' |
| '-identifier-' |
'-RETURN--+-scalar-expression-+-------------------------------------------------------'
'-NULL--------------'
>--------------------------------------------------------------><
method-signature
|---method-name--(--+---------------------------------------------------------+---)-->
| .-,--------------------------------------------------. |
| V | |
'----+-----------------+---data-type1--+-------------+--+-'
'-parameter-name--' '-AS LOCATOR--'
>----+------------------------------------------------------------------+->
'-RETURNS--+-data-type2--+-------------+------------------------+--'
| '-AS LOCATOR--' |
'-data-type3--CAST FROM--data-type4--+-------------+-'
'-AS LOCATOR--'
>---------------------------------------------------------------|
説明
- METHOD
- ユーザー定義の構造タイプに関連付けられる既存のメソッド指定を識別します。
メソッド指定は、以下のいずれかの方法で識別できます。
- method-name
- メソッド本体が定義されているメソッド指定の名前を指定します。
暗黙的スキーマは、サブジェクト・タイプ (type-name) のスキーマです。
この method-name のある type-name には、
1 つしかメソッドを指定できません (SQLSTATE 42725)。
- method-signature
- 定義するメソッドを一意的に識別できるメソッド・シグニチャーを指定します。
このメソッド・シグニチャーは、
CREATE TYPE または ALTER TYPE ステートメントで提供されたメソッド指定と一致しなければなりません (SQLSTATE 42883)。
- method-name
- メソッド本体が定義されているメソッド指定の名前を指定します。
暗黙的スキーマは、サブジェクト・タイプ (type-name) のスキーマです。
- parameter-name
- パラメーター名を指定します。
パラメーター名がメソッド・シグニチャーにより提供される場合、
これらは適合するメソッド指定の対応する部分と全く同じでなければなりません。
このステートメントでは、文書化だけのためにパラメーター名がサポートされています。
- data-type1
- 各パラメーターのデータ・タイプを指定します。
- AS LOCATOR
- LOB タイプまたは LOB タイプに基づく特殊タイプの場合、
AS LOCATOR 文節を追加することができます。
- RETURNS
- この分節は、メソッドの出力を指定します。
RETURNS 文節がメソッド・シグニチャーにより提供される場合、
これは CREATE TYPE で適合するメソッド指定の対応する部分と全く同じでなければなりません。
このステートメントでは、文書化だけのために RETURN 文節がサポートされています。
- data-type2
- 出力のデータ・タイプを指定します。
- AS LOCATOR
- LOB タイプまたは LOB タイプに基づく特殊タイプの場合、
AS LOCATOR 文節を追加することができます。
これは、実際の値の代わりに LOB ロケーターが、メソッドにより戻されることを指定します。
- data-type3 CAST FROM data-type4
- この形式の RETURNS 文節は、
関数コードから戻されたデータ・タイプとは異なるデータ・タイプを、
呼び出しステートメントに戻すのに使用されます。
- AS LOCATOR
- LOB タイプまたは LOB タイプに基づく特殊タイプの場合、AS LOCATOR 文節を使用して、
LOB ロケーターが実際の値の代わりにメソッドから戻されるように指定できます。
- FOR type-name
- 指定されたメソッドを関連付けるタイプを指定します。
この名前は、カタログにすでに記述されているタイプを示すものでなければなりません (SQLSTATE 42704)。
動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターは、
修飾子のないオブジェクト名の修飾子として使用されます。
静的 SQL ステートメントでは、
QUALIFIER プリコンパイル / バインド・オプションにより、
修飾子のないオブジェクト名の修飾子が暗黙指定されます。
- SPECIFIC METHOD specific-name
- CREATE TYPE 時に指定されたか、デフォルト値として与えられた値を使用して、
特定のメソッドを識別します。
specific-name は、指定したスキーマまたは暗黙のスキーマのメソッド指定を識別しなければなりません。
そうでない場合、エラーになります (SQLSTATE 42704)。
- EXTERNAL
- この文節は、この CREATE METHOD ステートメントを使用して登録するメソッドが、
外部プログラミング言語で作成されたコードに基づいており、
文書化されたリンケージの規則とインターフェースに従っていることを示します。
CREATE TYPE で適合するメソッド指定は、SQL 以外の LANGUAGE を指定しなければなりません。
このメソッドが呼び出されると、メソッドのサブジェクトが、
暗黙の最初のパラメーターとしてインプリメンテーションに渡されます。
NAME 文節の指定がない場合、"NAME method-name" が想定されます。
- NAME
- この文節は、定義するメソッドをインプリメントするユーザー作成コードの名前を指定します。
- 'ストリング (string)'
- 'string' オプションは、最大 254 文字のストリング定数です。
ストリングに使用される形式は、指定した LANGUAGE によって異なります。
特定の言語の規則についての詳細は、CREATE FUNCTION (外部スカラー) を参照してください。
- identifier
- 指定する identifier は SQL 識別子です。
SQL 識別子は、ストリングのライブラリー ID として使用されます。
区切られた識別子でない場合、識別子は大文字に変換されます。
識別子がスキーマ名で修飾されている場合、スキーマ名の部分は無視されます。
この形式の NAME は、LANGUAGE C でのみ使用可能です (CREATE TYPE のメソッド指定で定義)。
- TRANSFORM GROUP group-name
- メソッドを呼び出す際のユーザー定義の構造タイプのトランスフォーメーションに使用する
変形グループを指定します。
メソッド定義には、ユーザー定義の構造タイプが含まれているため、変形が必要です。
ここで、変形グループ名を指定することを強くお勧めします。
この文節が指定されない場合、使用されるデフォルトのグループ名は DB2_FUNCTION です。
参照された構造タイプに、
指定した (またはデフォルトの) グループ名が定義されていない場合には、
エラーになります (SQLSTATE 42741)。
同様に、指定したグループ名または構造タイプに、
必須の FROM SQL または TO SQL 変形関数が定義されていない場合には、エラーになります (SQLSTATE 42744)。
- RETURN scalar-expression または NULL
- RETURN ステートメントは、メソッドにより戻される値を指定する SQL 制御ステートメントです。
- scalar-expression
- CREATE TYPE のメソッド指定で LANGUAGE SQL を指定する際の、メソッド本体を指定する式です。
パラメーター名は、式で参照できます。
メソッドのサブジェクトは、SELF という名前の暗黙の最初のパラメーターの形式で、
メソッド・インプリメンテーションに渡されます。
式の結果データ・タイプは、
CREATE TYPE におけるメソッド指定の RETURNS 文節で定義されるデータ・タイプに
割り当て可能 (保管割り当て規則を使用) でなければなりません (SQLSTATE 42866)。
式は、メソッド指定の以下の部分に適合しなければなりません。
- DETERMINISTIC または NOT DETERMINISTIC (SQLSTATE 428C2)
- EXTERNAL ACTION または NO EXTERNAL ACTION (SQLSTATE 428C2)
- CONTAINS SQL または READS SQL DATA (SQLSTATE 42985)
- NULL
- 関数がヌル値を戻すように指定します。
このヌル値は、
CREATE TYPE ステートメントで作成されるメソッド指定の RETURNS 文節で定義されるデータ・タイプです。
規則
CREATE TYPE または ALTER TYPE ステートメントを使用して、
前もってメソッド指定を定義していなければ、CREATE METHOD は使用できません (SQLSTATE 42723)。
例
例 1:
CREATE METHOD BONUS (RATE DOUBLE)
FOR EMP
RETURN SELF..SALARY * RATE
例 2:
CREATE METHOD SAMEZIP (addr address_t)
RETURNS INTEGER
FOR address_t
RETURN
(CASE
WHEN (self..zip = addr..zip)
THEN 1
ELSE 0
END)
例 3:
CREATE METHOD DISTANCE (address_t)
FOR address_t
EXTERNAL NAME 'addresslib!distance'
TRANSFORM GROUP func_group
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]