間接参照操作

有効範囲を指定した参照式の有効範囲は、 ターゲット 表またはビューという表またはビューになります。

効力範囲を指定した参照式は、ターゲット行 を識別します。 ターゲット行 は、ターゲット表またはビューの (あるいは、副表かサブビューのいずれかの) 行です。 この行のオブジェクト ID (OID) 列値は、参照式と一致しています。 間接参照操作を使い、ターゲット行の列にアクセスしたり、 そのターゲット行をメソッドのサブジェクトとして使用してメソッドを呼び出すことができます。 間接参照操作の結果は、常に NULL になり得ます。 間接参照操作は、他のすべての操作よりも優先されます。

dereference-operation
構文図を読む構文図をスキップするscoped-ref-expression -> name1 (,expression)
scoped-ref-expression
有効範囲を持っている参照タイプである式 (SQLSTATE 428DT)。 式がホスト変数、パラメーター・マーカー、 またはほかの有効範囲がない参照タイプ値の場合、 SCOPE 節での CAST 指定で有効範囲の参照を指定する必要があります。
name1
修飾なしの ID を指定します。

name1 の後に括弧がなく、 name1 がターゲット・タイプの属性名と一致している場合、 間接参照操作の値は、ターゲット行の名前付き列の値になります。 その場合、列のデータ・タイプ (NULL 可能) の値により、間接参照操作の結果タイプが決まります。 オブジェクト ID が参照式と一致するターゲット行がない場合、間接参照操作の結果は NULL になります。 間接参照操作が選択リストで使用され、式の一部分としては組み込まれていない場合、 name1 が結果の列名になります。

name1 の後に括弧があるか、name1 がターゲット・タイプの属性名と一致しない場合、 間接参照操作はメソッド呼び出しとして扱われます。 呼び出されるメソッドの名前は name1 です。 メソッドのサブジェクトは、ターゲット行であり、その構造化タイプのインスタンスと見なされます。 オブジェクト ID が参照式と一致するターゲット行がない場合、 メソッドのサブジェクトは、ターゲット・タイプの NULL 値になります。 括弧内に式があれば、それはメソッド呼び出しの残りのパラメーターを指定するものです。 メソッド呼び出しの解決には、通常の処理が使われます。 選択したメソッドの結果タイプ (NULL 可能) の値により、間接参照操作の結果タイプが決まります。

間接参照操作を使用するステートメントの許可 ID は、 scoped-ref-expression のターゲット表での SELECT 特権を持っていなければなりません (SQLSTATE 42501)。

間接参照操作では、データベース内の値を変更できません。 間接参照操作を使用して変更メソッドを呼び出す場合、 その変更メソッドはターゲット行のコピーを変更してコピーを戻しますが、 データベースは未変更のままです。

  • DEPTREF という列がある EMPLOYEE 表 (属性 DEPTNAME を持っているタイプに基づく型付き表を効力範囲とする参照タイプ) があるとします。 表 EMPLOYEE の DEPTREF の値は、 DEPTREF 列のターゲット表にある OID 列値と対応していなければなりません。
       SELECT EMPNO, DEPTREF->DEPTNAME 
         FROM EMPLOYEE
  • 前の例と同じ表を使用し、間接参照操作を使って BUDGET というメソッドを呼び出します。 その際に、ターゲット行をサブジェクト・パラメーターとして、 そして '1997' を追加パラメーターとして指定します。
       SELECT EMPNO, DEPTREF->BUDGET('1997') AS DEPTBUDGET97
         FROM EMPLOYEE