サブタイプの扱い

subtype-treatment は、構造化タイプの式を、 そのサブタイプのいずれかへキャストするときに使用します。

subtype-treatment
Read syntax diagramSkip visual syntax diagramTREAT(expressionAS data-type)

expression の静的タイプは、ユーザー定義構造化タイプでなければなりません。 このタイプは、data-type と同じタイプであるか、 またはそのスーパータイプでなければなりません。 data-type のタイプ名が修飾されていない場合は、 SQL パスを使用してタイプ参照を解決します。 subtype-treatment の結果の静的タイプは data-type であり、 subtype-treatment の値は expression の値になります。 実行時に、expression の動的タイプが data-type ではないか、 data-type のサブタイプでない場合、エラーが戻されます (SQLSTATE 0D000)。

  • 列 CIRCLE_COL のすべての列オブジェクト・インスタンスに、 動的タイプ COLOREDCIRCLE があることを、アプリケーション側が認識している場合、 次の照会を使って、そのようなオブジェクト上でメソッド RGB を呼び出します。 構造化タイプ CIRCLE の列 CIRCLE_COL をもった RINGS という表が存在するとします。 また、COLOREDCIRCLE が CIRCLE のサブタイプであり、COLOREDCIRCLE に対してメソッド RGB が RGB() RETURNS DOUBLE としてあらかじめ定義されているとします。
       SELECT TREAT (CIRCLE_COL AS COLOREDCIRCLE)..RGB()
         FROM RINGS
    実行時に、動的タイプ CIRCLE のインスタンスが存在する場合、エラーになります (SQLSTATE 0D000)。 このエラーは、次に示すように、CASE 式の中で TYPE 述部を使うことで避けることができます。
       SELECT (CASE
         WHEN CIRCLE_COL IS OF (COLOREDCIRCLE)
           THEN TREAT (CIRCLE_COL AS COLOREDCIRCLE)..RGB()
           ELSE NULL
         END)
         FROM RINGS