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+000SQLプロパティ・グラフ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親トピック: グラフ・パターンについて