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
のデータ型は、FLOAT
とBINARY_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_DOUBLE
はFLOAT
より優先されるため、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
親トピック: グラフ・パターンについて