4 カスタム・メタデータを使用したSODAコレクション構成
SODAコレクションは高度な構成が可能です。コレクション・メタデータは、デフォルトで提供されるものとは異なる動作を実装するようにカスタマイズできます。
注意:
コレクション・メタデータをカスタマイズして、デフォルトで提供されている動作とは異なる動作を取得できます。ただし、一部のコンポーネントを変更するには、SQLデータ型などのOracle Databaseの概念をよく理解している必要があります。やむを得ない理由のないかぎり、そのようなコンポーネントは変更しないことをお薦めします。SODAコレクションはOracle Databaseの表(またはビュー)の上に実装されるため、基礎になる表構成には多数のコレクション構成コンポーネントが関連します。
たとえば、コンテンツ列の型をBLOB (デフォルト値)からVARCHAR2に変更する場合、その影響(VARCHAR2のコンテンツ・サイズが32Kバイトに制限されること、キャラクタ・セットの変換が発生する場合があることなど)を理解する必要があります。
- 既存のコレクションのメタデータの取得
コレクションのすべてのメタデータをJSONドキュメントとして取得するには、SODA_COLLECTION_Tのメソッドget_metadata()を使用します。 - カスタム・メタデータが含まれるコレクションの作成
カスタム・メタデータが含まれるドキュメント・コレクションを作成するには、そのメタデータをJSONデータとしてPL/SQLファンクションDBMS_SODA.create_collectionに渡します。
関連項目:
-
SODAドキュメントのコレクションとそのメタデータに関する一般情報は、『Oracle Database Simple Oracle Document Access (SODA)の概要』を参照してください
-
コレクション・メタデータのコンポーネントに関するリファレンス情報は、『Oracle Database Simple Oracle Document Access (SODA)の概要』を参照してください
4.1 既存コレクションのメタデータの取得
コレクションのすべてのメタデータをJSONドキュメントとして取得するには、SODA_COLLECTION_Tのメソッドget_metadata()を使用します。
関連項目:
-
SODA_COLLECTION_Tのメソッドget_metadata()の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください -
SQL/JSONファンクション
json_queryの詳細は、『Oracle Database SQL言語リファレンス』を参照してください
例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
}親トピック: カスタム・メタデータを使用した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パッケージおよびタイプ・リファレンス』を参照してください -
SODA_COLLECTION_Tのメソッドget_metadata()の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください -
SQL/JSONファンクション
json_queryの詳細は、『Oracle Database SQL言語リファレンス』を参照してください
例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;
/
これは整形された出力です。コレクションの仕様で指定されていないkeyColumnとcontentColumnのフィールドの値には、デフォルト値が設定されます。コレクションの仕様で指定されているフィールド(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
}