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
}