グラフ参照

目的

各GRAPH_TABLEは、パターン一致を実行するためにグラフを参照するグラフ参照で始まります。

前提条件

プロパティ・グラフを問い合せるには、そのグラフに対するREADまたはSELECTオブジェクト権限が必要です。なお、そのグラフの基になる表またはマテリアライズド・ビューに対するREADまたはSELECTオブジェクト権限は必要ありません。

GRAPH_TABLEgraph_ref_as_of_clauseを使用してOracle Flashback Queryを発行するには、さらに、そのグラフの基になる表およびマテリアライズド・ビューに対するFLASHBACKオブジェクト権限が必要になります。これは、指定されたグラフ・パターンおよびそこで使用されるラベル式に基づいて、その問合せによってアクセスされるそのような表およびビューに対してのみ必要になります。別の方法としては、FLASHBACK ANY TABLEシステム権限が必要になります。

構文

graph_reference::=

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分以内に実行されることを前提としています。それ以外の場合、出力は異なります。