SQL 解説書

CREATE TRANSFORM

CREATE TRANSFORM ステートメントは、 グループ名で識別されるトランスフォーメーション関数を定義します。この関数は、 ホスト言語プログラムおよび外部関数とメソッドを相手に構造タイプ値を交換するのに使います。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、 または動的 SQL ステートメントを使用して発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。 しかし、バインド・オプション DYNAMICRULES BIND を適用する場合、 ステートメントを動的に準備することはできません (SQLSTATE 42509)。

許可

このステートメントの許可 ID には、以下の特権が少なくとも 1 つ含まれている必要があります。

構文

>>-CREATE--+-TRANSFORM--+---FOR--type-name---------------------->
           '-TRANSFORMS-'
 
      .------------------------------------------------------------------------------------.
      |                 .-,--------------------------------------------------------.       |
      V                 V                                                   (1)    |       |
>--------group-name--(------+-TO SQL---+---WITH--| function-specification |--------+---)---+>
                            '-FROM SQL-'
 
>--------------------------------------------------------------><
 
function-specification
 
|---+-FUNCTION--function-name--+-------------------------------+-+->
    |                          '-(--+-------------------+---)--' |
    |                               |  .-,-----------.  |        |
    |                               |  V             |  |        |
    |                               '----data-type---+--'        |
    '-SPECIFIC FUNCTION--specific-name---------------------------'
 
>---------------------------------------------------------------|
 

注:

  1. 同じ文節を複数回指定することはできません。

説明

TRANSFORM または TRANSFORMS
1 つ以上の変形グループを定義することを指示します。 いずれかのバージョンのキーワードを指定することができます。

FOR type-name
変形グループを定義する対象となるユーザー定義構造タイプの名前を指定します。

動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターは、 修飾子のない type-name の修飾子として使用されます。 静的 SQL ステートメントでは、QUALIFIER プリコンパイル / バインド・オプションによって、 修飾子のない type-name の修飾子が暗黙指定されます。 この type-name は既存のユーザー定義タイプであり (SQLSTATE 42704)、 しかも構造タイプでなければなりません (SQLSTATE 42809)。 構造タイプまたはこれと同じタイプ階層内の他の構造タイプが、 特定のグループ名を使って変形をすでに定義済みであってはなりません (SQLSTATE 42739)。

group-name
TO SQL および FROM SQL 関数をもつ変形グループの名前を指定します。 その名前は固有名である必要はありません。しかし、 その名前の付いた変形グループ (同じ TO SQL や FROM SQL 指示が定義されている) が、 指定の type-name ですでに定義済みであってはなりません (SQLSTATE 42739)。 group-name は、SQL 識別子である必要があり、 長さは最大 18 文字であり (SQLSTATE 42622)、 そして修飾子接頭部が付いていてはなりません (SQLSTATE 42601)。 group-name を接頭部 SYS で始めることはできません。 これは、データベースで使うために予約されているからです (SQLSTATE 42939)。

どのグループに対しても、 FROM SQL と TO SQL 関数のそれぞれの指名を最大で 1 つずつ指定することができます (SQLSTATE 42628)。

TO SQL
SQL ユーザー定義構造タイプ・フォーマットに値を変形するのに使用する個々の関数を定義します。 この関数では、すべてのパラメーターを組み込みデータ・タイプとして使用しなければならず、 戻りタイプは type-name です。

FROM SQL
SQL ユーザー定義構造タイプを表す組み込みデータ・タイプ値に値を変形するのに使用する個々の関数を定義します。 この関数では、データ・タイプ type-name の 1 つのパラメーターを使う必要があり、 1 つの組み込みデータ・タイプ (または一連の組み込みデータ・タイプ) を戻します。

WITH function-specification
関数インスタンスの指定には、いくつかの方法を使うことができます。

FROM SQL を指定する場合、function-specification に、 次のような要件を満たす関数を指定しなければなりません。

TO SQL を指定する場合、function-specification に、 次のような要件を満たす関数を指定しなければなりません。

メソッド (FUNCTION ACCESS を使って指定したものでも) を、 function-specification を使って変形として指定することはできません。 つまり、CREATE FUNCTION ステートメントで定義されている関数だけが、 変形として作動することができます (SQLSTATE 42704 または 42883)。

さらに、必須ではありませんが、FROM SQL 関数から戻された 1 つ以上の組み込みタイプが、 TO SQL 関数のパラメーターである 1 つ以上の組み込み関数と直接対応しているべきです。 これが、この 2 つの関数の相反する関係の論理的結末です。

FUNCTION function-name
特定の関数を名前で指定します。 function-name (関数名) の関数がちょうど 1 つだけ存在している場合にのみ有効です。 このように指定するプロシージャーには、 任意の数のパラメーターが定義されていても構いません。

動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターは、 修飾子のないオブジェクト名の修飾子として使用されます。 静的 SQL ステートメントでは、 QUALIFIER プリコンパイル / バインド・オプションにより、 修飾子のないオブジェクト名の修飾子が暗黙指定されます。

指定したスキーマまたは暗黙のスキーマにこの名前の関数が存在しない場合は、 エラー (SQLSTATE 42704) になります。 指定したスキーマまたは暗黙のスキーマに、 この関数の特定インスタンスが複数存在する場合、 エラー (SQLSTATE 42725) になります。 関数選択の標準アルゴリズムは使用されません。

FUNCTION function-name (data-tape,...)
使用する関数を固有に指定する関数シグニチャーを指定します。 関数選択の標準アルゴリズムは使用されません。

function-name
関数の名前を指定します。 動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターは、 修飾子のないオブジェクト名の修飾子として使用されます。 静的 SQL ステートメントでは、 QUALIFIER プリコンパイル / バインド・オプションにより、 修飾子のないオブジェクト名の修飾子が暗黙指定されます。

(data-type,...)
ここで指定するデータ・タイプは、 CREATE FUNCTION ステートメントの対応する位置に指定されたデータ・タイプに一致していなければなりません。 データ・タイプの数、およびデータ・タイプを論理的に連結した値を使って、特定の関数を識別します。

data-type が修飾なしの場合は、SQL パスでスキーマを検索してタイプ名が決定されます。 REFERENCE タイプに指定するデータ・タイプ名にも同様の規則が当てはまります。

パラメーター化データ・タイプの長さ、精度、または位取りを指定する必要はありません。 代わりに、空の括弧をコーディングすることによって、 データ・タイプの一致を調べる際にそれらの属性を無視するように指定することができます。

パラメーター値が異なるデータ・タイプ (REAL または DOUBLE) を示しているため、 FLOAT() を使用することはできません (SQLSTATE 42601)。 ただし、長さ、精度、または位取りをコーディングする場合、 その値は、CREATE FUNCTION ステートメントにおける指定に完全に一致していなければなりません。

0 <n<25 は REAL を意味し、24<n<54 は DOUBLE を意味するので、 FLOAT(n) のタイプは、n に定義された値と一致している必要はありません。 タイプが REAL か DOUBLE かによって、生じる一致は異なってきます。 FOR BIT DATA 属性は、 一致検索のためのシグニチャーの一部とはみなされません。 たとえばシグニチャーの中に CHAR FOR BIT DATA が指定されている場合、 それは CHAR と定義されている関数とだけ一致することになります。

指定したスキーマまたは暗黙のスキーマに、指定したシグニチャーを持つ関数がない場合は、 エラー (SQLSTATE 42883) になります。

SPECIFIC FUNCTION specific-name
関数の作成時に指定された特定関数名、 またはデフォルト値として使用された特定関数名を使用して、 特定のユーザー定義関数を指定します。

動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターは、 修飾子のないオブジェクト名の修飾子として使用されます。 静的 SQL ステートメントでは、QUALIFIER プリコンパイル / バインド・オプションによって、 修飾子のないオブジェクト名の修飾子が暗黙指定されます。 specific-name (特定名) は、 指定したスキーマまたは暗黙のスキーマの特定関数のインスタンスを指定していなければなりません。 そうでない場合、エラー (SQLSTATE 42704) になります。

例 1: ユーザー定義構造タイプの多角形を、 C 用にカスタマイズした変形関数と Java 用に特殊化した変形関数に関連付ける 2 つの変形グループを作成します。

   CREATE TRANSFORM FOR POLYGON
      mystruct1 (FROM SQL WITH FUNCTION myxform_sqlstruct,
                 TO SQL WITH FUNCTION myxform_structsql)
      myjava1   (FROM SQL WITH FUNCTION myxform_sqljava,
                 TO SQL WITH FUNCTION myxform_javasql )


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]