4 プロパティ・グラフのSQL DDL文
SQLデータ定義言語(DDL)文を使用して、SQLプロパティ・グラフを作成、再検証および削除できます。
- SQLプロパティ・グラフの作成CREATE PROPERTY GRAPHDDL文を使用すると、Oracle Databaseでプロパティ・グラフ・オブジェクトを直接作成できます。
- SQLプロパティ・グラフの再検証ALTER PROPERTY GRAPH COMPILEDDL文を使用すると、データベース内の既存のプロパティ・グラフ・オブジェクトを再検証できます。
- SQLプロパティ・グラフの削除DROP PROPERTY GRAPHDDL文を使用すると、Oracle Databaseのプロパティ・グラフ・オブジェクトを削除できます。
- SQLプロパティ・グラフでのJSONのサポート
 SQLプロパティ・グラフを作成する場合は、簡易ドット表記法を使用して、JSONデータ型列に対してラベル・プロパティを定義できます。後でSQLグラフ問合せ内でこのプロパティにアクセスできます。
親トピック: SQLプロパティ・グラフ
4.1 SQLプロパティ・グラフの作成
CREATE PROPERTY GRAPH DDL文を使用すると、Oracle Databaseでプロパティ・グラフ・オブジェクトを直接作成できます。
                  
例4-1 CREATE PROPERTY GRAPH DDL文を使用したSQLプロパティ・グラフの作成
                     
この例では、グラフの基礎となるデータベース表としてpersons、university、friendsおよびstudent_ofを使用して、SQLプロパティ・グラフstudents_graphを作成します。
                     
この例を実行するには、次のことを確認してください:
- 「データベースでのサンプル・データの設定」の説明に従って、データベースにサンプル表を設定します。
- SQLプロパティ・グラフの作成に必要な権限があることを確認するには、「SQLプロパティ・グラフに対するシステム権限およびオブジェクト権限の付与」を参照してください。
次の図は、students_graphを示しています。
                     
対応するSQLプロパティ・グラフDDL文を次に示します。
CREATE PROPERTY GRAPH students_graph
  VERTEX TABLES (
    persons KEY (person_id)
      LABEL person
        PROPERTIES (person_id, name, birthdate AS dob)
      LABEL person_ht
        PROPERTIES (height),
    university KEY (id)
  )
  EDGE TABLES (
    friends
      KEY (friendship_id)
      SOURCE KEY (person_a) REFERENCES persons(person_id)
      DESTINATION KEY (person_b) REFERENCES persons(person_id)
      PROPERTIES (friendship_id, meeting_date),
    student_of
      SOURCE KEY (s_person_id) REFERENCES persons(person_id)
      DESTINATION KEY (s_univ_id) REFERENCES university(id)
      PROPERTIES (subject)
  );実行時に、前述の例では、スキーマの表を使用してグラフ要素表を定義するSQLプロパティ・グラフ・オブジェクトを作成します。新しいSQLプロパティ・グラフ・オブジェクトを作成すると、プロパティ・グラフ・メタデータのみが格納され、基礎となるデータベース・オブジェクトからグラフ要素表にデータがコピーされることはありません。これは、SQLプロパティ・グラフを問い合せると、データベース内の現在のグラフ・データに対してすべてのグラフ問合せが実行されることを意味します。十分な権限がある場合は、SQLプロパティ・グラフを含む別のスキーマを指定することもできます。
- 2つの頂点グラフ要素表:
                              - persons: 表には明示的に定義された一意キー- person_idがあり、次の2つのラベルに関連付けられています:- person: このラベルは、- person_id、- nameおよび- birthdateをプロパティとして公開します。
- person_ht: このラベルは、- heightプロパティのみを公開します。
 
- university: 表のラベルは暗黙的に推測され、デフォルトでは、基礎となるデータベース表の表示列はすべてプロパティとして公開されます。
 
- 2つのエッジ・グラフ要素表:
                              - friends: エッジ表は、ソースと宛先の両方の頂点表の基礎となるデータベース表として- personsを参照します。エッジ表のソース・キーと宛先キー(- person_aおよび- person_b)は、それぞれソースと宛先の頂点表の一意キーに対応します。エッジ表のラベルは、グラフ要素表の名前(この場合は- friends)から自動的に推測され、- friendship_idおよび- meeting_dateがプロパティとして公開されます。
- student_of: エッジ表は、ソースおよび宛先の頂点表の基礎となるデータベース表としてそれぞれ- personsおよび- universityを参照します。エッジ表のソース・キーと宛先キー(- s_person_idおよび- s_univ_id)は、それぞれソースと宛先の頂点表の一意キーに対応します。エッジ表のラベルは、グラフ要素表の名前(この場合は- student_of)から自動的に推測され、- subjectがプロパティとして公開されます。
 
CREATE PROPERTY GRAPH DDL文のOR REPLACE句を使用して、SQLプロパティ・グラフを再定義できます。この句を使用すると、以前に付与されたオブジェクト権限を削除、再作成および再付与することなく、既存のSQLプロパティ・グラフの定義を変更できます。
                        関連項目:
『Oracle Database SQL言語リファレンス』のCREATE PROPERTY GRAPH次の各項では、グラフ要素表、キー、ラベルおよびプロパティの概念について説明します:
- 頂点およびエッジ・グラフ要素表について
 基礎となるデータベース・オブジェクトから定義されたSQLプロパティ・グラフの頂点およびエッジは、グラフ要素表に格納されます。
- 頂点およびエッジ表キーについて
 SQLプロパティ・グラフ定義で使用される各頂点およびエッジ表には、SQLプロパティ・グラフで一意の頂点またはエッジを識別するためのキーが必要です。
- ラベルとプロパティについて
 ラベルを1つ以上のグラフ要素表に関連付け、グラフ定義を拡張できます。ラベルは、プロパティの有無に関係なく定義できます。
- グラフ・オプションを使用したSQLプロパティ・グラフの作成
 グラフ・オプションを使用して、SQLプロパティ・グラフの作成時の動作を制御できます。
- SQLプロパティ・グラフに対するシステム権限およびオブジェクト権限の付与
 SQLプロパティ・グラフに対する操作を実行するための新しいシステム権限およびオブジェクト権限について学習します。
- DBMS_METADATAパッケージを使用したSQL作成DDLの取得
- SQLプロパティ・グラフの作成の制限事項
 この項では、SQLプロパティ・グラフの作成時に適用されるいくつかの制限を示します。
親トピック: プロパティ・グラフのSQL DDL文
4.1.1 頂点およびエッジ・グラフ要素表について
基礎となるデータベース・オブジェクトから定義されたSQLプロパティ・グラフの頂点およびエッジは、グラフ要素表に格納されます。
グラフ要素表は、頂点表またはエッジ表のいずれかです。
次の項を簡単に理解するには、例4-1のグラフ定義を参照してください:
頂点グラフ要素表
- 頂点表は、VERTEX TABLES句を使用して定義されます。
- 頂点表の各行は、グラフの頂点に対応します。
- 頂点グラフ要素表には、基礎となるデータベース・オブジェクトの名前と無関係の名前があります。
- デフォルトでは、頂点グラフ要素表の名前は基礎となるデータベース・オブジェクトの名前と同じです。
- 頂点表名はグラフに対して一意である必要があります。同じデータベース・オブジェクトの複数のグラフ要素表を含むSQLプロパティ・グラフを定義する場合は、AS句を使用して代替グラフ要素の表名を指定する必要があります。
エッジ・グラフ要素表
- エッジ表は、EDGE TABLES句を使用して定義されます。
- それぞれの頂点表をREFERENCESするSOURCEおよびDESTINATIONキーワードを使用して、ソース頂点表と宛先頂点表の間の直接的な関係を指定します。
- エッジ表の各行は、グラフのエッジに対応します。
- エッジ・グラフ要素表には、基礎となるデータベース・オブジェクトの名前と無関係の名前があります。
- デフォルトでは、エッジ・グラフ要素表の名前は、基礎となるデータベース・オブジェクトの名前と同じです。
- エッジ表名はグラフに対して一意である必要があります。エッジ表名は、頂点表または別のエッジ表と共有できません。
親トピック: SQLプロパティ・グラフの作成
4.1.2 頂点およびエッジ表キーについて
SQLプロパティ・グラフ定義で使用される各頂点およびエッジ表には、SQLプロパティ・グラフで一意の頂点またはエッジを識別するためのキーが必要です。
キーは、基礎となる表の1つ以上の列から定義されます。キーは、既存の主キー、または基礎となる表に定義された一意制約に基づいて暗黙的に推測することも、明示的に定義することもできます。キーは一意である必要があります。
ただし、ENFORCED MODEでグラフを作成する場合は、キー列の一意性制約が必要です。それ以外の場合は、一意性制約がないキー列を使用して、TRUSTED MODEでグラフを作成できます。グラフの作成時に適用できる様々なモードの詳細は、「グラフ・オプションを使用したSQLプロパティ・グラフの作成」を参照してください。
                     
頂点またはエッジ表キーは、次の組込みデータ型列のいずれかに対して定義できます:
- VARCHAR2
- NVARCHAR2
- NUMBER
- BINARY_FLOAT
- BINARY_DOUBLE
- CHAR
- NCHAR
- DATE
- INTERVAL(- YEAR TO MONTHと- DAY TO SECONDの両方)
- TIMESTAMP
TIMESTAMP WITH TIME ZONEデータ型はサポートされていません。
                     
次の項を簡単に理解するには、例4-1のSQLプロパティ・グラフ定義を参照してください:
頂点表キー
- デフォルトでは、頂点表のキーは、基礎となるデータベース・オブジェクトの単一のPRIMARY KEYまたはUNIQUEキー制約から自動的に識別されます。両方が存在する場合、PRIMARY KEY制約はUNIQUEキー制約よりも優先されます。
- 頂点表キーが単一のUNIQUEキーに基づいて自動的に推測される場合、そのUNIQUEキーの一連の列もNOT NULLである必要があります。
- 基礎となるデータベース・オブジェクトに一意性を強制するための一意制約が含まれていない場合は、頂点表の一意キーを定義する列を識別するために、VERTEX TABLES句にKEY副句を明示的に定義する必要があります。列名は基礎となるデータベース・オブジェクトの列名と一致する必要があります。
- コンポジット頂点表キーもサポートされています。
エッジ表キー
- デフォルトでは、エッジ表のキーは、基礎となるデータベース・オブジェクトの単一のPRIMARY KEYまたはUNIQUEキー制約から自動的に識別されます。両方が存在する場合、PRIMARY KEY制約はUNIQUEキー制約よりも優先されます。
- エッジ表キーが単一のUNIQUEキーに基づいて自動的に推測される場合、そのUNIQUEキーの一連の列もNOT NULLである必要があります。
- 基礎となるデータベース・オブジェクトに一意性を強制するための一意制約が含まれていない場合は、エッジ表の一意キーを定義する列を識別するために、EDGE TABLES句にKEY副句を明示的に定義する必要があります。列名は基礎となるデータベース・オブジェクトの列名と一致する必要があります。
- デフォルトでは、SOURCEおよびDESTINATION表キーは、それぞれ、エッジ表と基礎となるソース表と宛先表の間にある単一のFOREIGN KEY制約から自動的に取得されます。
- ただし、次のいずれかに該当する場合は、SOURCEおよびDESTINATION頂点表に対してKEY副句を明示的に指定する必要があります:- エッジと参照されている頂点表の間にFOREIGN KEY制約はありません。
- エッジと参照される頂点表の間に複数のFOREIGN KEY制約があります。
- エッジ表とそのソースおよび宛先の頂点表の基礎となるデータベース・オブジェクトは、マテリアライズド・ビューまたは外部表です。
 
- エッジと参照されている頂点表の間に
ノート:
データベース・オブジェクトの主キー制約に適用されるすべての制限は、頂点およびエッジ表のキーにも適用されます。親トピック: SQLプロパティ・グラフの作成
4.1.3 ラベルとプロパティについて
ラベルを1つ以上のグラフ要素表に関連付け、グラフ定義を拡張できます。ラベルは、プロパティの有無に関係なく定義できます。
オプションで、グラフの頂点およびエッジ表に対してLABELSおよびPROPERTIESを定義できます。指定しない場合、グラフ要素表にグラフ要素表の名前を持つラベルが自動的に割り当てられ、列名をプロパティ名として使用して、すべての表示列がプロパティとして公開されます。 
                     
次の項を簡単に理解するには、例4-1のSQLプロパティ・グラフ定義を参照してください:
ラベル
- デフォルトでは、頂点およびエッジ表には、それぞれのグラフ要素表の名前を持つラベルが自動的に割り当てられます。
- DEFAULT LABEL副句を使用して、前述のルールを明示的に適用することもできます。
- LABEL副句を使用して、新しいラベル名を頂点またはエッジ・グラフ要素表に明示的に割り当てることができます。
- 同じグラフ要素表に複数のラベルを関連付けることができます。
- 同じラベルを複数のグラフ要素表で共有できます。 
                              次の条件が当てはまる場合、ラベルを複数のグラフ要素表(共有ラベル)に関連付けることができます: - このラベルを共有するすべてのグラフ要素表は、同じプロパティ名のセットを宣言します。ラベル定義では、プロパティの順序は重要ではありません。
- 同じプロパティ名で公開される異なる列または値式には、論理和互換の型があります。
 
- また、詳細は、「プロパティ・タイプを決定するためのタイプ互換性ルール」を参照してください。
プロパティ
- デフォルトでは、ラベル宣言がない場合、またはプロパティ・グラフ定義でDEFAULT LABEL副句が使用されている場合、頂点またはエッジ表のすべての表示列がプロパティとして自動的に公開されます。プロパティ名は、基礎となるデータベース・オブジェクトの列名と同じです。
- Oracle組込みデータ型の列は、SQLプロパティ・グラフでラベルのプロパティとして公開できます。これには、仮想列、JSONデータ型列、CLOBおよびBLOBデータ型が含まれています。ただし、次はサポートされていません: - XMLTypeおよび- SDO_GEOMETRY型の列はサポートされていません。
- バイナリXMLとして格納されたXMLType列に対するSQL/XML値式、およびSDO_GEOMETRYオブジェクト・データ型列に対するSDO_GEOMETRY組込み関数は、プロパティでサポートされている型の値を返すかぎり許可されます。一般オブジェクト・データ型とユーザー定義データ型、およびそれらに対する対応するSQL演算子値式はサポートされません。
- ANYTYPE型の列は、プロパティとして公開できません。
 
- SQLプロパティ・グラフの作成時に、頂点またはエッジ・プロパティのデータ型は次のように決定されます:
                              - 個別のラベルに関連付けられた個別プロパティのデータ型は、基礎となるデータベース列と同じになります。
- 異なるラベルからの同じ名前のプロパティは、基礎となるデータベース列と同じデータ型を持ちます。ただし、SQLプロパティ・グラフを作成する場合は、ALLOW MIXED PROPERTY TYPESオプションを使用する必要があります。共有プロパティ名を使用する例については、「グラフ・オプションを使用したSQLプロパティ・グラフの作成」を参照してください。 
- 同じラベルから同じ名前のプロパティは、基礎となるデータベース列のUNION ALL互換型を持ちます。また、SQLプロパティ・グラフを作成する場合は、ALLOW MIXED PROPERTY TYPESオプションを使用する必要があります:- 共有ラベルで共有プロパティ名を使用する例については、「グラフ・オプションを使用したSQLプロパティ・グラフの作成」を参照してください。
- プロパティ・タイプを決定するタイプ・ルールの詳細は、「プロパティ・タイプを決定するためのタイプ互換性ルール」を参照してください。
 
 
- ラベルの頂点またはエッジ・プロパティを明示的に定義する場合、次のプロパティ宣言がサポートされています:
                              - PROPERTIES [ARE] ALL COLUMNS: グラフ要素表のすべての表示列をラベル・プロパティとして公開します。ただし、ソース・データベース・オブジェクトで列が追加または削除された場合、SQLプロパティ・グラフの作成後にこれらの列はグラフに反映されません。
- PROPERTIES [ARE] ALL COLUMNS EXCEPT(<column_names_list>): グラフ要素表のすべての表示列を、明示的にリストされている列を除き、ラベル・プロパティとして公開します。
- PROPERTIES(<list_of_column_names>): ラベル・プロパティとして明示的にリストされているグラフ要素表の列のみを公開します。プロパティ名はデフォルトで列名になります。
- PROPERTIES(<column_name AS property_name,...>): 前述のオプションと同じです。ただし、- AS property_nameを- column_nameに追加すると、- property_nameがプロパティ名として使用されます。
- PROPERTIES(<column_expressions AS property_name,...>): 列に対する式であるプロパティを宣言します。この場合、- AS句は必須です。値式は、スカラー・データ型の列に対して定義されたSQL演算子式またはJSON式のいずれかです。JSON式の使用例については、「SQLプロパティ・グラフでのJSONのサポート」を参照してください。
- NO PROPERTIES: ラベルの列は公開されません。
 
- 疑似列は、ラベル・プロパティとして公開できません。
親トピック: SQLプロパティ・グラフの作成
4.1.4 グラフ・オプションを使用したSQLプロパティ・グラフの作成
グラフ・オプションを使用して、SQLプロパティ・グラフの作成時の動作を制御できます。
CREATE PROPERTY GRAPH DDL文の最後にOPTIONS句を使用して指定できます。必要に応じて、MODEオプションまたはMIXED PROPERTY TYPESオプション、あるいはその両方を使用できます。
                     オプションを使用したグラフのモードの指定
SQLプロパティ・グラフの作成時に次のいずれかのオプション値を使用して、グラフのMODEを指定できます:
                        - ENFORCED MODE: これにより、基礎となるデータベース表に一意キー制約への依存関係が確保されます。SQLプロパティ・グラフの作成時に- CREATE PROPERTY GRAPH文を使用すると、次のいずれかの条件が当てはまる場合にエラーがスローされます:- グラフ要素表の指定された頂点またはエッジ表KEYが、NOT NULL列で定義されたPRIMARY KEYキーでもUNIQUEキーでもありません。
- グラフ要素表に明示的な頂点またはエッジ表KEYが定義されておらず、基礎となるデータベース表のNOT NULL列に単一のPRIMARY KEYまたは単一のUNIQUEキー制約がないため、デフォルトの頂点またはエッジ・キーを自動的に識別できません。
- 指定されたエッジ・ソース・キーおよび対応するソース頂点キー、または指定されたエッジ宛先キーおよび対応する宛先頂点キーに対して、基礎となる表の間に対応するFOREIGN KEYが存在しません。
- エッジ表にはソースまたは宛先に対する明示的なキーがなく、エッジ表と参照されるソース(または宛先)頂点表の間に単一のFOREIGN KEY制約がないため、システムがキーを暗黙的に推測できません。
 - たとえば、主キー、一意キーまたは - NOT NULL制約がないデータベース内の次の- t1表について考えてみます。- SQL> CREATE TABLE t1 (id NUMBER, name VARCHAR2(10)); INSERT INTO t1 (id, name) VALUES (1,'John'); INSERT INTO t1 (id, name) VALUES (2, 'Mary');- 次のように、 - OPTIONS(ENFORCED MODE)を使用してSQLプロパティ・グラフを作成します:- CREATE PROPERTY GRAPH g VERTEX TABLES ( t1 KEY (id) LABEL t PROPERTIES ARE ALL COLUMNS ) OPTIONS(ENFORCED MODE);- 一意性を強制するキー制約がないため、グラフの作成は次のエラーで失敗します: - ORA-42434: グラフ要素の表キーを定義するために使用される列は、強制モードではNULL以外である必要があります- 前のグラフ定義の - KEY句を省略すると、次のエラーがスローされます:- ORA-42402: グラフ要素表T1のキーを推測できません
- グラフ要素表の指定された頂点またはエッジ表
- TRUSTED MODE(デフォルト):- TRUSTEDモードを使用する場合、基礎となるデータベース表に対する一意キー制約への依存関係はありません。したがって、前述の例を- TRUSTEDモードで実行しても、エラーはスローされません。これは、このオプションを使用することを選択した場合、各グラフ要素表の主キーの一意性、およびエッジ表とそのソース表と宛先表の間の有効な外部キー参照を保証する必要があることを意味します。そうしないと、予想される保証が満たされないため、グラフ問合せの結果が正しくなくなる可能性があります。
共有プロパティ名に対して異なるプロパティ・タイプを許可または禁止するオプションの使用
MIXED PROPERTY TYPESオプションは、次のいずれかの値を使用して指定できます:
                        - ALLOW MIXED PROPERTY TYPES: これにより、次のことが保証されます:- 同じ名前の2つのプロパティが異なるラベルに属している場合は、完全に異なるタイプを持つことができます。
                                    たとえば、サンプル表 personsおよびstudentsに加えて(「データベースでのサンプル・データの設定」を参照)、次の追加表を作成します:CREATE TABLE t2 (id NUMBER, height VARCHAR2(4), CONSTRAINT t2_pk PRIMARY KEY (id)); INSERT INTO t2 (id, height) VALUES (1, '1.80'); INSERT INTO t2 (id, height) VALUES (2, '1.65'); CREATE TABLE t3 (id NUMBER, height BINARY_DOUBLE, CONSTRAINT t3_pk PRIMARY KEY (id)); INSERT INTO t3 (id, height) VALUES (1, 1.80); INSERT INTO t3 (id, height) VALUES (2, 1.65);同じプロパティ名 heightに3つの異なるラベルを使用する次のCREATE PROPERTY GRAPHDDL文を実行します。CREATE PROPERTY GRAPH g1 VERTEX TABLES ( persons LABEL person PROPERTIES (name, height), t2 LABEL t2 PROPERTIES (height), t3 LABEL t3 PROPERTIES (height) )OPTIONS(ALLOW MIXED PROPERTY TYPES);グラフが作成されると、関連付けられた頂点表のheightのプロパティ・タイプは、次のようになります:- LABEL personは- FLOATです
- LABEL t2は- VARCHARです
- LABEL t3は- BINARY_DOUBLEです
 ただし、このグラフを問い合せる場合、 heightのプロパティ・タイプは、SQLグラフ問合せで使用されるラベル制約に依存します。詳細は、「ラベル・プロパティへのアクセス」を参照してください。
- 共有ラベル内でプロパティ名を共有している場合は、すべての論理和互換型である必要があります。
                                    たとえば、共有ラベル t内でプロパティ名heightが使用されている次のCREATE PROPERTY GRAPHDDL文を実行します:CREATE PROPERTY GRAPH g2 VERTEX TABLES ( persons LABEL t PROPERTIES (height), t2 LABEL t PROPERTIES (height) )OPTIONS(ALLOW MIXED PROPERTY TYPES);
 - 表 - personsおよび- t2の列- heightのデータ型がそれぞれ- FLOATおよび- VARCHARで、論理和の互換性がないため、グラフの作成が失敗します。したがって、次のエラーがスローされます:- ORA-42414: プロパティHEIGHT (ラベルT)に複合型を使用することはできません- ただし、 - FLOATおよび- BINARY_DOUBLEが数値グループに属し、論理和互換であるため、次のグラフは正常に作成されます。- CREATE PROPERTY GRAPH g3 VERTEX TABLES ( persons LABEL t PROPERTIES (height), t3 LABEL t PROPERTIES (height) )OPTIONS(ALLOW MIXED PROPERTY TYPES);- 詳細は、「プロパティ・タイプを決定するためのタイプ互換性ルール」を参照してください。 
- 同じ名前の2つのプロパティが異なるラベルに属している場合は、完全に異なるタイプを持つことができます。
                                    
- DISALLOW MIXED PROPERTY TYPES(デフォルト): これにより、同じ名前のプロパティは厳密に同じデータ型である必要があります。これは、単一または複数のグラフ要素表に関連付けられているかどうかに関係なく、すべてのラベルに適用されます。- たとえば、基礎となるデータベース表として - personsおよび- t2を使用して、次のDDL文を実行します:- CREATE PROPERTY GRAPH g4 VERTEX TABLES ( persons LABEL person PROPERTIES (name, height), t2 LABEL t2 PROPERTIES (height) );- 前述のコードでは、デフォルトの - DISALLOW MIXED PROPERTY TYPESグラフ・オプションが使用されるため、複合プロパティ・タイプがグラフ定義で使用されていると、エラーがスローされます:- ORA-42414: プロパティHEIGHT (ラベルT2)に複合型を使用することはできません
次の表に、MIXED PROPERTY TYPESオプションに関する互換性ルールをまとめています
                        
脚注1 同じ名前のラベルを複数のグラフ要素表に関連付けることができます。
脚注2 同じ名前のプロパティは、異なるラベルで公開できます。
親トピック: SQLプロパティ・グラフの作成
4.1.5 SQLプロパティ・グラフに対するシステム権限およびオブジェクト権限の付与
SQLプロパティ・グラフに対する操作を実行するための新しいシステム権限およびオブジェクト権限について学習します。
表4-1 SQLプロパティ・グラフ・オブジェクトのシステム権限
| システム権限 | 説明 | 
|---|---|
| CREATE PROPERTY GRAPH | 権限受領者のスキーマにSQLプロパティ・グラフを作成します | 
| CREATE ANY PROPERTY GRAPH | SYSおよびAUDSYS以外の任意のスキーマにSQLプロパティ・グラフを作成します | 
| ALTER PROPERTY GRAPH | 権限受領者のスキーマのSQLプロパティ・グラフを変更します | 
| ALTER ANY PROPERTY GRAPH | SYSおよびAUDSYS以外の任意のスキーマのSQLプロパティ・グラフを変更します | 
| READ PROPERTY GRAPH | 権限受領者のスキーマのSQLプロパティ・グラフを問い合せます | 
| READ ANY PROPERTY GRAPH | SYSおよびAUDSY以外の任意のスキーマのSQLプロパティ・グラフを問い合せます | 
| SELECT PROPERTY GRAPH | 権限受領者のスキーマのSQLプロパティ・グラフを問い合せます | 
| DROP ANY PROPERTY GRAPH | SYSおよびAUDSYS以外の任意のスキーマのSQLプロパティ・グラフを削除します | 
表4-2 SQLプロパティ・グラフのオブジェクト権限
| オブジェクト権限 | 説明 | 
|---|---|
| ALTER | SQLプロパティ・グラフを変更します | 
| READ | SQLグラフ問合せを使用してSQLプロパティ・グラフを問い合せます | 
| 脚注3 SELECT | SQLグラフ問合せを使用してSQLプロパティ・グラフを問い合せます | 
脚注3
SELECT権限は、SQLプロパティ・グラフ・オブジェクトのREAD権限とまったく同様に動作することに注意してください。これは主に、プロパティ・グラフ・オブジェクトのSQL標準との互換性のために存在します。
                           
次に、SQLプロパティ・グラフに関連する権限の付与および取消しの例を示します。次の権限を付与および取り消すSYSDBAアクセス権があることを確認してください:
GRANT CREATE PROPERTY GRAPH, CREATE ANY PROPERTY GRAPH, 
      ALTER ANY PROPERTY GRAPH, DROP ANY PROPERTY GRAPH, 
      READ ANY PROPERTY GRAPH TO <graphuser>;REVOKE CREATE PROPERTY GRAPH, CREATE ANY PROPERTY GRAPH, 
      ALTER ANY PROPERTY GRAPH, DROP ANY PROPERTY GRAPH, 
      READ ANY PROPERTY GRAPH FROM <graphuser>;次のように、データベース内のSQLプロパティ・グラフを別のユーザーと共有できます。
GRANT SELECT ON PROPERTY GRAPH <graph_name> TO <schema_user>;親トピック: SQLプロパティ・グラフの作成
4.1.6 DBMS_METADATAパッケージを使用したSQL作成DDLの取得
DBMS_METADATAパッケージを使用して、SQLプロパティ・グラフの作成DDLを取得できます。
                     
次の例では、DBMS_METADATAパッケージを使用して「SQLプロパティ・グラフの作成」で作成したグラフのDDLを表示します。
                     
SQL> SELECT DBMS_METADATA.GET_DDL('PROPERTY_GRAPH', 'STUDENTS_GRAPH') FROM DUAL;
  CREATE PROPERTY GRAPH "GRAPHUSER"."STUDENTS_GRAPH"
  VERTEX TABLES (
   "GRAPHUSER"."PERSONS" AS "PERSONS" KEY ("PERSON_ID")
      LABEL PERSON PROPERTIES ("PERSON_ID", "NAME", "BIRTHDATE" AS "DOB")
      LABEL PERSON_HT PROPERTIES ("HEIGHT"),
   "GRAPHUSER"."UNIVERSITY" AS "UNIVERSITY" KEY ("ID")
      PROPERTIES ("ID", "NAME") )
  EDGE TABLES (
   "GRAPHUSER"."FRIENDS" AS "FRIENDS" KEY ("FRIENDSHIP_ID")
      SOURCE KEY("PERSON_A") REFERENCES PERSONS ("PERSON_ID")
      DESTINATION KEY("PERSON_B") REFERENCES PERSONS ("PERSON_ID")
     PROPERTIES ("FRIENDSHIP_ID", "MEETING_DATE"),
   "GRAPHUSER"."STUDENT_OF" AS "STUDENT_OF" KEY ("S_ID")
      SOURCE KEY("S_PERSON_ID") REFERENCES PERSONS ("PERSON_ID")
      DESTINATION KEY("S_UNIV_ID") REFERENCES PERSONS ("ID")
     PROPERTIES ("SUBJECT") )
  OPTIONS (TRUSTED MODE, DISALLOW MIXED PROPERTY TYPES)親トピック: SQLプロパティ・グラフの作成
4.1.7 SQLプロパティ・グラフの作成の制限事項
この項では、SQLプロパティ・グラフの作成時に適用されるいくつかの制限を示します。
- ハイブリッド・パーティション表およびこれらの表から導出されたビューは、SQLプロパティ・グラフのグラフ要素表として使用できません。
- データベース・リンク、およびこれらのリンクを使用して定義されたビューは、SQLプロパティ・グラフのグラフ要素表として使用できません。
- オブジェクト表(CREATE TABLE x OF myObjectTypeで作成された表)およびオブジェクト・ビューは、SQLプロパティ・グラフのグラフ要素表として使用できません。
- XMLType表(CREATE TABLE x OF XMLTYPE ...で作成された表)は、SQLプロパティ・グラフのグラフ要素表として使用できません。ただし、SQL/XML演算子(SQL値式としてプロパティを定義するためにバイナリXMLとして格納される、XMLType列に対するXMLExists()、XMLCast(XMLQuery()))は、サポートされています。
- ANYTYPE型の列は、プロパティまたはグラフ要素表のキーとして公開できません。
- 疑似列は、プロパティまたはグラフ要素表のキーとして公開できません。
- PL/SQL関数への呼出しを構成する列式は、プロパティとして公開できません。同様に、PL/SQL関数への呼出しを構成する列式に対して定義された仮想列は、プロパティとして公開できません。
- SQLプロパティ・グラフはエディション化できません。
- SQLプロパティのグラフ定義は、グラフの作成後は変更できません。ただし、CREATE PROPERTY GRAPHDDL文のOR REPLACE句を使用して、SQLプロパティ・グラフを再定義できます。
- シャード・カタログでは、SQLプロパティ・グラフの作成はサポートされていません。ただし、ローカル・シャード内のシャード表に対してプロパティ・グラフを作成できます。
親トピック: SQLプロパティ・グラフの作成
4.2 SQLプロパティ・グラフの再検証
ALTER PROPERTY GRAPH COMPILE DDL文を使用すると、データベース内の既存のプロパティ・グラフ・オブジェクトを再検証できます。
                  
ALTER PROPERTY GRAPH操作の実行に必要な権限があることを確認してください。
                  例4-2 SQLプロパティ・グラフの再検証
ALTER PROPERTY GRAPH students_graph COMPILE;関連項目:
『Oracle Database SQL言語リファレンス』のALTER PROPERTY GRAPH親トピック: プロパティ・グラフのSQL DDL文
4.3 SQLプロパティ・グラフの削除
DROP PROPERTY GRAPH DDL文を使用すると、Oracle Databaseのプロパティ・グラフ・オブジェクトを削除できます。
                  
例4-3 SQLプロパティ・グラフの削除
次の例では、データベース内のSQLプロパティ・グラフstudents_graphを削除します。
                     
DROP PROPERTY GRAPH students_graph;データベース・ビューと同様に、プロパティ・グラフ・オブジェクトを削除しても、基礎となるデータベース表は削除されません。
関連項目:
『Oracle Database SQL言語リファレンス』のDROP PROPERTY GRAPH親トピック: プロパティ・グラフのSQL DDL文
4.4 SQLプロパティ・グラフでのJSONのサポート
SQLプロパティ・グラフを作成する場合は、簡易ドット表記法を使用して、JSONデータ型列に対してラベル・プロパティを定義できます。後でSQLグラフ問合せ内でこのプロパティにアクセスできます。
- VARCHAR
- NUMBER
- BINARY_FLOAT
- BINARY_DOUBLE
- DATE
- TIMESTAMP
-  .string()、.number()、.float()、.double()、.date()、.timestamp()、.binary()またはJSON_VALUE演算子を使用してSQLデータ型に変換された未加工のJSONデータ
したがって、JSONドット表記法またはJSON_VALUE演算子を使用して、JSONデータ内のスカラー値を選択し、SQLプロパティ・グラフ・ラベル・プロパティを定義できます。これは、SQLグラフ問合せ内のJSONデータ型列に対して定義されたラベル・プロパティにアクセスする場合にも適用されます。
                     
例4-4 ラベル・プロパティのJSONドット表記法およびJSON式を使用したSQLプロパティ・グラフの定義
次の例では、JSONデータ型列に対して定義されたラベル・プロパティを含むSQLプロパティ・グラフを作成します。グラフは、「データベースでのサンプル・データの設定」で定義されているサンプル・データベース表(personsおよびfriendships)を使用して作成されます。この例では、JSONドット表記法とJSON_VALUE式の両方を使用して、ラベル・プロパティを定義します。
                     
CREATE PROPERTY GRAPH friends_graph
  VERTEX TABLES (
      persons AS p KEY (person_id)
        LABEL person
          PROPERTIES (name, birthdate AS dob,
               p.hr_data.department.string() AS "works_in",
               JSON_VALUE(person_data, '$.role') AS "works_as")
  )
  EDGE TABLES (
      friends
        KEY (friendship_id)
        SOURCE KEY (person_a) REFERENCES p(person_id)
        DESTINATION KEY (person_b) REFERENCES p(person_id)
        PROPERTIES (meeting_date)
  );グラフが正常に作成され、次の例に示すようにグラフを問い合せることができます:
例4-5 SQLプロパティ・グラフの問合せおよびSQL/JSON式として定義されたラベル・プロパティへのアクセス
次の例では、前の例で作成したSQLプロパティ・グラフを問い合せて、JSONデータ型列に対して作成されたラベル・プロパティにアクセスします。
SELECT * FROM GRAPH_TABLE (friends_graph
  MATCH
   (a IS person) -[e IS friends]-> (b IS person)
   COLUMNS (a.name AS a,
            a."works_in" AS "a_works_in",
            e.meeting_date,
            b.name AS b)
);問合せの出力は次のようになります。
A     a_works_in MEETING_D B
----- ---------- --------- -----
John  IT         01-SEP-00 Bob
Mary  HR         19-SEP-00 Alice
Mary  HR         19-SEP-00 John
Bob   IT         10-JUL-01 Mary例4-6 JSONデータ型のラベル・プロパティを使用したSQLプロパティ・グラフの作成および問合せ
次の例では、JSONデータ型のラベル・プロパティを使用してSQLプロパティ・グラフを作成します:
CREATE PROPERTY GRAPH friends_graph_new
  VERTEX TABLES (
      persons AS p KEY (person_id)
        LABEL person
          PROPERTIES (name, birthdate AS dob, p.hr_data AS "p_data")
  )
  EDGE TABLES (
      friends
        KEY (friendship_id)
        SOURCE KEY (person_a) REFERENCES p(person_id)
        DESTINATION KEY (person_b) REFERENCES p(person_id)
        PROPERTIES (meeting_date)
  );その後、次のようにJSON_VALUE式を使用してグラフを問い合せることができます:
                     
SELECT * FROM GRAPH_TABLE (friends_graph_new
  MATCH
   (a IS person WHERE JSON_VALUE(a."p_data", '$.department') = 'IT') -[e]-> (b)
   COLUMNS (a.name AS a, 
           a."p_data".department.string() AS "a_works_in",
           a."p_data".role.string() AS "a_works_as",
           e.meeting_date,
           b.name AS b)
  );A     a_works_in a_works_as           MEETING_D B
----- ---------- -------------------- --------- -----
John  IT         Software Developer   01-SEP-00 Bob
Bob   IT         Technical Consultant 10-JUL-01 Mary親トピック: プロパティ・グラフのSQL DDL文
