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

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

注意:

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

たとえば、コンテンツ列の型をBLOB (デフォルト値)からVARCHAR2に変更する場合、その影響(VARCHAR2のコンテンツ・サイズが32Kバイトに制限されること、キャラクタ・セットの変換が発生する場合があることなど)を理解する必要があります。

関連項目:

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

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

関連項目:

例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;
/

例4-2 デフォルトのコレクション・メタデータ

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

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

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

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

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

関連項目:

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

この例では、KEYという名前の列(ドキュメントのキー用)とJSONという名前の列(ドキュメントのコンテンツ・タイプJSON用)の2つのメタデータ列を指定するカスタム・メタデータでコレクションを作成します。キーの割当てメソッドはCLIENTです。またコンテンツ列のSQLデータ型はVARCHAR2です。この例では、SODA_COLLECTION_Tのメソッドget_metadata()を使用して、新しく作成したコレクションから完全なメタデータを取得します。取得したメタデータは、SQL/JSONファンクションjson_queryに渡され整形出力されます(キーワードPRETTYを使用)。

DECLARE
    collection SODA_COLLECTION_T;
    metadata VARCHAR2(4000) :=
      '{"keyColumn" : {"name" : "KEY",  "assignmentMethod": "CLIENT" },
        "contentColumn" : { "name" : "JSON", "sqlType": "VARCHAR2" } }';
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" : "KEY",
    "sqlType" : "VARCHAR2",
    "maxLength" : 255,
    "assignmentMethod" : "CLIENT"
  },

"contentColumn" :
  {
    "name" : "JSON",
    "sqlType" : "VARCHAR2",
    "maxLength" : 4000,
    "validation" : "STANDARD"
  },
  "readOnly" : false
}