グラフ参照
目的
各GRAPH_TABLEは、パターン一致を実行するためにグラフを参照するグラフ参照で始まります。
前提条件
プロパティ・グラフを問い合せるには、そのグラフに対するREAD
またはSELECT
オブジェクト権限が必要です。なお、そのグラフの基になる表またはマテリアライズド・ビューに対するREAD
またはSELECT
オブジェクト権限は必要ありません。
GRAPH_TABLE
でgraph_ref_as_of_clause
を使用してOracle Flashback Queryを発行するには、さらに、そのグラフの基になる表およびマテリアライズド・ビューに対するFLASHBACK
オブジェクト権限が必要になります。これは、指定されたグラフ・パターンおよびそこで使用されるラベル式に基づいて、その問合せによってアクセスされるそのような表およびビューに対してのみ必要になります。別の方法としては、FLASHBACK ANY TABLE
システム権限が必要になります。
構文
graph_reference::=
graph_name::=
graph_ref_as_of_clause::=
セマンティクス
グラフ名は、スキーマ名で修飾して、他のユーザーが作成したグラフを問い合せることができます。さらに、graph_ref_as_of_clause
句を指定して、特定の変更番号(SCN
)またはタイムスタンプでグラフ問合せの結果を取得できます。SCN
を指定する場合は、expr
が数値に評価される必要があります。TIMESTAMP
を指定する場合は、expr
がタイムスタンプ値に評価される必要があります。どちらの場合も、expr
の評価結果がNULLであってはなりません。
例1
次の問合せは、ユーザーscottが所有するstudents_graph内のユーザー数をカウントします:
SELECT COUNT(*) FROM GRAPH_TABLE ( scott.students_graph MATCH (a IS person) COLUMNS (a.name) );
出力は次のとおりです:
COUNT(*) ---------- 4
例2
次の例では、2つの異なるタイムスタンプでグラフを問い合せます。最初に、students_graph
の基になるuniversity表に新しい行を挿入します。その後、その挿入の前後のそのグラフのバージョンを問い合せます。
INSERT INTO university (name) VALUES ('u3');
SELECT COUNT(*) FROM GRAPH_TABLE ( students_graph MATCH (u IS university) COLUMNS (u.*) );
SELECT COUNT(*) FROM GRAPH_TABLE ( students_graph AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' MINUTE) MATCH (u IS university) COLUMNS (u.*) );
DELETE FROM university WHERE name = 'u3';
最初の問合せの出力は次のとおりです:
COUNT(*) ---------- 3
2番目の問合せの出力は次のとおりです:
COUNT(*) ---------- 2
ノート: この例では、2番目のSELECT
問合せが、そのグラフを作成した後少なくとも2分で実行され、INSERT
文の実行後2分以内に実行されることを前提としています。それ以外の場合、出力は異なります。