5.1.3 ラベル・プロパティへのアクセス

グラフ要素パターン内のプロパティには、表外のWHERE句またはCOLUMNS句でアクセスできます。

次のグラフ要素パターンについて考えてみます。aはグラフ要素変数で、nameはプロパティ名です:

(a IS person WHERE a.name='John')

その後、グラフ要素パターン内のWHERE句のプロパティをa.nameとして参照できます。これは、a.nameがグラフ・パターン変数aにバインドされたグラフ要素のプロパティnameを参照することを意味します。

また、プロパティへのアクセス時には次の条件が適用されます:

  • プロパティnameは、ラベル式を満たす1つ以上の表の一部です。
  • プロパティにアクセスするには、常にグラフ変数名を使用する必要があります。
  • 問合せのコンパイル時に、特定のタイプ・チェック・ルールが頂点またはエッジ表のプロパティに適用されます。詳細は、「プロパティ・タイプを決定するためのタイプ互換性ルール」を参照してください。

次の例では、SQLプロパティ・グラフの問合せ時にプロパティ・タイプを決定するいくつかのシナリオを示します。例5-1から例5-3は、様々なラベルの共有プロパティとしてheightを含むSQLプロパティのg1のグラフ定義を参照していることに注意してください。

例5-1 単一ラベルのプロパティ・タイプの決定

次の問合せのa.heightのデータ型はFLOATです:

SELECT * FROM GRAPH_TABLE (g1
MATCH
(a IS person)
COLUMNS (a.height)
);
問合せの出力は次のようになります。
HEIGHT
----------
       1.8
      1.65
      1.75
       1.7

例5-2 2つの異なるラベルの論理和互換プロパティ・タイプの決定

次の問合せのa.heightのデータ型は、FLOATBINARY_DOUBLEの間の論理和互換型です:

SELECT * FROM GRAPH_TABLE (g1
MATCH
(a IS person|t3)
COLUMNS (a.height)
);
問合せの出力は次のようになります。
    HEIGHT
----------
  1.8E+000
 1.65E+000
 1.75E+000
  1.7E+000
  1.8E+000
 1.65E+000

SQLプロパティ・グラフg1では、ラベルpersonおよびt3に関連付けられたheightのプロパティ・タイプはそれぞれFLOATおよびBINARY_DOUBLEです。BINARY_DOUBLEFLOATより優先されるため、a.heightの出力プロパティ・タイプはBINARY_DOUBLEになります。

例5-3 2つの異なるラベルの論理和互換プロパティ・タイプがない場合

a.heightのデータ型が表person (FLOAT)およびt2 (VARCHAR)間で論理和互換ではないため、次の問合せに対してエラーがスローされます:

SELECT * FROM GRAPH_TABLE (g1
  MATCH
   (a IS person|t2)
  COLUMNS (a.height)
  );

実行時に、前述の問合せはエラーORA-01790:「式には対応する式と同じデータ型を持つ必要があります」をスローします

例5-4 共有ラベルの論理和互換プロパティ・タイプの決定

共有プロパティ名(height)に関連付けられた共有ラベル(t)を使用するg3のSQLプロパティ・グラフ定義について考えてみます。

g3を問い合せる場合、次のSQLグラフ問合せのa.heightのデータ型はBINARY_DOUBLEです。

SELECT * FROM GRAPH_TABLE (g3
MATCH
(a IS t)
COLUMNS (a.height)
);
問合せの出力は、ラベルを共有するすべてのグラフ要素表のプロパティ列の論理和です。また、「プロパティ・タイプを決定するためのタイプ互換性ルール」に従って、プロパティ・タイプはBINARY_DOUBLEになります:
    HEIGHT
----------
  1.8E+000
 1.65E+000
 1.75E+000
  1.7E+000
  1.8E+000
 1.65E+000