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