4 カスタム・メタデータを使用したSODAコレクション構成

SODAコレクションは高度な構成が可能です。コレクション・メタデータは、デフォルトで提供されるものとは異なる動作を実装するようにカスタマイズできます。

ノート:

コレクション・メタデータをカスタマイズして、デフォルトで提供されている動作とは異なる動作を取得できます。ただし、一部のコンポーネントを変更するには、SQLデータ型などのOracle Databaseの概念をよく理解している必要があります。やむを得ない理由のないかぎり、そのようなコンポーネントは変更しないことをお薦めします。SODAコレクションはOracle Databaseの表(またはビュー)の上に実装されるため、基礎になる表構成には多数のコレクション構成コンポーネントが関連します。

たとえば、コンテンツ列の型をデフォルト値からVARCHAR2に変更する場合、VARCHAR2のコンテンツ・サイズが32KBに制限されること、文字セットの変換が発生する場合があるという影響を理解する必要があります。

関連項目:

4.1 既存コレクションのメタデータの取得

コレクションのすべてのメタデータをJSONドキュメントとして取得するには、SODA_COLLECTION_Tのメソッドget_metadata()を使用します。

関連項目:

  • SODA_COLLECTION_Tのメソッドget_metadata()の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』GET_METADATAファンクションに関する項を参照してください

  • SQL/JSONファンクションjson_queryの詳細は、『Oracle Database SQL言語リファレンス』JSON_QUERYに関する項を参照してください

例4-1 コレクションのメタデータの取得

この例では、例3-3を使用して作成したデフォルト構成のコレクションに対して、SODA_COLLECTION_Tのメソッドget_metadata()を呼び出した結果を示します。(また、取得したJSONデータを整形出力するために、キーワードPRETTYを指定したSQL/JSONファンクションjson_queryも使用しています)。

DECLARE
    collection  SODA_COLLECTION_T;
BEGIN
    collection := DBMS_SODA.open_collection('myCollectionName');
    IF collection IS NULL THEN
        DBMS_OUTPUT.put_line('Collection does not exist');
    ELSE
        DBMS_OUTPUT.put_line('Metadata: '
                             || json_query(collection.get_metadata, '$' PRETTY));
    END IF;
END;
/

コレクションのデフォルト・メタデータは、『Oracle Database Simple Oracle Document Access (SODA)の概要』デフォルトのコレクション・メタデータに関する項に記載されています。

4.2 カスタム・メタデータが含まれるコレクションの作成

カスタム・メタデータが含まれるドキュメント・コレクションを作成するには、そのメタデータをJSONデータとしてPL/SQLファンクションDBMS_SODA.create_collectionに渡します。

PL/SQLファンクションDBMS_SODA.create_collectionへの2番目の引数(オプション)は、SODAのコレクションの仕様です。これは、新しいコレクションのメタデータを指定するJSONデータです。

すでに同じ名前のコレクションが存在する場合は、そのコレクションが開かれ、そのハンドルが返されます。指定されたカスタム・メタデータが既存のコレクションのメタデータと一致しない場合、そのコレクションは開かれずにエラーが発生します。(一致するには、すべてのメタデータ・フィールドが同じ値を保持している必要があります)。

関連項目:

  • PL/SQLファンクションDBMS_SODA.create_collectionの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』CREATE_COLLECTIONファンクションに関する項を参照してください

  • SODA_COLLECTION_Tメソッドget_metadata()の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』SODA_COLLECTION_Tタイプに関する項を参照してください

  • SQL/JSONファンクションjson_queryの詳細は、『Oracle Database SQL言語リファレンス』JSON_QUERYに関する項を参照してください

例4-2 カスタム・メタデータが含まれるコレクションの作成

この例では、キー割当て方法がCLIENTに設定されていることを除いて、デフォルトのメタデータを使用してコレクションを作成します。

この例では、SODA_COLLECTION_Tのメソッドget_metadata()を使用して、新しく作成したコレクションから完全なメタデータを取得します。取得したメタデータは、SQL/JSONファンクションjson_queryに渡され整形出力されます(キーワードPRETTYを使用)。

DECLARE
    collection SODA_COLLECTION_T;
    metadata VARCHAR2(4000) :=
      '{"keyColumn" : {"name" : "ID", "assignmentMethod" : "CLIENT" },
        "contentColumn" : {"name" : "JSON_DOCUMENT"},
        "versionColumn" : {"name" : "VERSION"},
        "lastModifiedColumn" : {"name" : "LAST_MODIFIED"},
        "creationTimeColumn" : {"name" : "CREATED_ON"}}';
BEGIN
    collection := DBMS_SODA.create_collection('myCustomCollection',
                                              metadata);
    DBMS_OUTPUT.put_line('Collection specification: ' ||
                         json_query(collection.get_metadata, '$' PRETTY));
END;
/

これは整形された出力です。コレクションの指定で指定されていないkeyColumncontentColumnのフィールドの値には、デフォルト値が設定されます。コレクション指定で指定されているフィールド以外(つまり、keyColumnおよびcontentColumn以外)のフィールドの値もデフォルト値に設定されます。フィールドtableNameの値は、コレクション名からデフォルト値が設定されます。フィールドschemaNameの値は、コレクション作成時の現行データベース・スキーマ(ユーザー)です。

Collection specification: {
  "schemaName" : "mySchemaName",
  "tableName" : "myCustomCollection",
  "keyColumn" :
  {
    "name" : "ID",
    "sqlType" : "VARCHAR2",
    "maxLength" : 255,
    "assignmentMethod" : "CLIENT"
  },
  "contentColumn" :
  {
    "name" : "JSON_DOCUMENT",
    "sqlType" : "BLOB",
    "compress" : "NONE",
    "cache" : true,
    "encrypt" : "NONE",
    "validation" : "STANDARD"
  },
  "lastModifiedColumn" :
  {
    "name" : "LAST_MODIFIED"
  },
  "versionColumn" :
  {
    "name" : "VERSION",
    "method" : "UUID"
  },
  "creationTimeColumn" :
  {
    "name" : "CREATED_ON"
  },
  "readOnly" : false
}