112 DBMS_JSON_DUALITY
DBMS_JSON_DUALITY
パッケージは、JSONリレーショナル二面性ビューの作成とアクセスを簡略化します。
- JSONコレクションのセットをJSONリレーショナル二面性ビューに移行または変換
- 二面性ビューでの複数操作非対話型トランザクションの実行
この章では、パッケージの「概要」、パッケージに関連付けられている「セキュリティ制限」の概要、およびパッケージ内で使用可能な「サブプログラム」の詳細を示します。
DBMS_JSON_DUALITYの概要
DBMS_JSON_DUALITY
パッケージを使用すると、JSONドキュメントとリレーショナル・データベース間のシームレスな統合が可能になります。 このパッケージには、JSONコレクションをJSONリレーショナル二面性ビューに変換し、データを二面性ビューにインポートし、二面性ビューでの複数操作トランザクションをサポートするサブプログラムが用意されています。
DBMS_JSON_DUALITY
パッケージには、リレーショナル・スキーマの検索と作成、JSONドキュメントの二面性ビューへのインポート、およびインポートされた二面性ビューでの非対話型トランザクションの実行を可能にする一連のプロシージャおよびファンクションが含まれています。
- JSON-To-Duality Migrator : 次に示す適切なJSON-To-Duality Migrator PL/SQLファンクションのいずれかを実行して、入力コレクション(JSON表)のリレーショナル・スキーマを検索して作成します。
-
INFER_SCHEMA
: すべての入力ドキュメント・セットを表すJSONスキーマを推測します。 -
GENERATE_SCHEMA
: 各二面性ビューに必要なデータベース・オブジェクトを作成するためのDDLコードを生成します。 -
INFER_AND_GENERATE_SCHEMA
:INFER_SCHEMA
とGENERATE_SCHEMA
の両方の操作を実行します。
-
- JSON-to-Dualityインポータ:
この機能は、アプリケーション・データをJSONドキュメントのセットからJSON-To-Dualityコンバータ機能を使用して定義された二面性ビューにインポートするPL/SQLプロシージャ
IMPORT
です。 JSON-To-Dualityコンバータで作成されたリレーショナル・スキーマに基づいて、入力データは自動的に分解され、リレーショナル表に正規化されます。 正常にインポートできないデータは、エラー・ログに記録され、可能な場合はエラーの理由と問題を修正するための提案が示されます。ノート:
インポータ機能は、JSONリレーショナル二面性コンバータ機能で推奨されるリレーショナル・スキーマに問題がない場合にのみ使用します。 - 非対話型トランザクションこの機能は、二面性ビューで複数操作トランザクションを実行できるPL/SQLプロシージャのセットです。
DBMS_JSON_DUALITY
パッケージの非対話型プロシージャを次に示します:-
BEGIN_TRANSACTION
: 複数操作トランザクションを開始します。 -
REGISTER
: 最後の読取りとしてドキュメントのETAG値が、トランザクションの開始時にデータベース内のドキュメントのETAG値と一致することを確認します。 -
COMMIT_TRANSACTION
: 複数操作トランザクションをコミットします。
-
DBMS_JSON_DUALITYセキュリティ
DBMS_JSON_DUALITY
パッケージ内のすべてのサブプログラムは、実行者権限で実行されます。 これを使用するには、サブプログラムで参照される表およびビューに対するSELECT
権限が必要です。
INFER_SCHEMA
、GENERATE_SCHEMA
およびINFER_AND_GENERATE_SCHEMA
サブプログラムで構成されるJSON-To-Dualityマイグレータには、次の制限があります:
-
SYS
スキーマでは実行できません。 -
targetSchema
が現在のスキーマでない場合は、任意の表の選択権限が必要です。 これがない場合、targetSchema
の表へのアクセスを試行中に二面性ビューの作成が失敗します。例:grant select any table to targetSchema;
DBMS_JSON_Dualityサブプログラムのサマリー
この表は、DBMS_JSON_DUALITY
サブプログラムを示し、簡単に説明しています。
DBMS_JSON_DUALITYパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
JSONコレクションのセット(単一のJSON列を持つ表)およびJSONドキュメントとしてフォーマットされた構成パラメータを入力として受け取ります。 コレクションをJSONドキュメントとして表す、検証済で正規化されたリレーショナル・スキーマを戻します |
|
JSONドキュメントとして表される正規化されたリレーショナル・スキーマを入力として受け取り、スキーマを生成するためのDDLスクリプトを戻します。 |
|
JSONコレクションのセット(単一のJSON列を持つ表)およびJSONドキュメントとしてフォーマットされた構成パラメータを入力として受け取ります。 コレクションをCLOBとして表す検証済で正規化されたリレーショナル・スキーマを生成するDDLスクリプトを戻します。 |
|
スキーマ検証のレポートを返す表ファンクション。 ノート: スキーマを検証するには、適切なDDLスクリプトを実行してスキーマを作成したと想定されます。 |
|
二面性ビューの基礎となる表にデータをインポートします。 インポートに失敗したドキュメントをエラー・ログに記録します。 |
|
複数の表から対応する二面性ビューにデータをインポートするプロシージャ。 |
|
インポート検証用のレポートを返す表ファンクション。 入力JSONコレクション内のドキュメント(単一のJSON列を持つ表)と対応する二面性ビューのドキュメントを比較し、検証に失敗したドキュメントのレポートを生成します。 ノート: インポートを検証するには、「IMPORTプロシージャ」またはIMPORT_ALLプロシージャを使用してデータをインポートしたと想定されます。 |
|
特別な複数操作トランザクションを開始します。 |
|
複数操作トランザクションをコミットします。 |
|
トランザクションで変更する各ドキュメントを登録し、前回の読取り以降にドキュメントが変更されていないことを確認します。 |
INFER_SCHEMAファンクション
この項では、INFER_SCHEMA
ファンクションの構文、入力および出力形式について説明します。
概要
このファンクションは、単一のJSON列を持つ表と、JSONドキュメントとしてフォーマットされた構成パラメータを入力として受け取ります。 JSON構成ドキュメントの入力フィールドについては、「入力構成パラメータ」の項を参照してください。 コレクションをJSONドキュメントとして表す、検証済で正規化されたリレーショナル・スキーマを戻します。
構文
FUNCTION INFER_SCHEMA(config in JSON)
RETURN JSON;
例112-1 INFER_SCHEMAファンクションの例
DECLARE
schema_json json;
schema_sql clob;
BEGIN
-- infer schema
schema_json :=
dbms_json_duality.infer_schema(
json('{
"tableNames" : ["EMPLOYEE_TAB", "DEPARTMENT_TAB"],
"viewNames" : ["EMPLOYEES", "DEPARTMENTS"],
"hints" : json({"type" : "key",
"table" : "EMP",
"path" : "$",
"value" : "empName"}),
"useFlexFields" : true,
"updatability" : true,
"sourceSchema" : "HR",
"targetSchema" : "HR",
"tablespace" : "HR_TBS",
"outputFormat" : "executable"
}'));
入力構成フィールド
ノート:
INFER_SCHEMA
、INFER_AND_GENERATE_SCHEMA
およびIMPORT_ALL
は、入力としてJSON構成ドキュメントを取ります。 これらのファンクションのパラメータ・リストは異なりますが、重複しています。 ただし、ファンクションと、そのファンクションに適用されないパラメータの両方に使用できる共通の構成ドキュメントを作成することは無視されます。
フィールド | 値 |
---|---|
tableNames |
処理するJSONコレクションの表名の文字列のJSON配列 |
viewNames |
生成される出力二面性ビュー名の文字列のJSON配列 |
useFlexFields |
二面性ビューでフレックス・フィールドを使用する必要があるかどうかを示すブール・フィールド。
|
updatability |
マイグレータによって作成された二面性ビューをデフォルトで更新可能にするかどうかを示すブール・フィールド。
|
normalize |
ミグレータがデータの重複解除のために参照するリレーショナル表の正規化を試行するかどうかを示すブール・フィールド。 このパラメータのデフォルト値は'true'です |
sourceSchema |
この文字列フィールドは、入力表のスキーマ名を定義します。
|
targetSchema |
この文字列フィールドは、出力表および二面性ビューのスキーマ名を定義します。
|
tablespace |
この文字列フィールドは、マイグレータによって作成されたすべての表に使用する
tablespace 名を定義します。
|
ingestLimit |
この数値フィールドは、リレーショナル・スキーマを推測するために各JSONコレクションで分析されるドキュメントの最大数を定義します。
|
outputFormat |
この文字列フィールドは、出力DDLスクリプトの形式を定義します。
|
minFieldFrequency |
この数値フィールドは、高エントロピ・フィールドを識別するためのしきい値(パーセント)を定義します。
|
minTypeFrequency |
この数値フィールドは、特定のフィールドの上位エントロピ・タイプを識別するためのしきい値をパーセンテージで定義します。
|
softnessThreshold |
この数値フィールドは、入力データのファンクション依存性を識別する際に許容される'ソフトネス'のしきい値(パーセント)を定義します。
|
hints |
フィールドでリレーショナル・スキーマの生成時のコンバータの動作に対するオーバーライドを指定するJSONオブジェクトである要素を含むJSON配列。 ヒント・オブジェクトにはこれらのフィールドが必要です(それ以外の場合はエラーが発生します):
type , table , path およびvalue 。 value 以外のすべてのパラメータは文字列型です。
ノート: hints フィールドの詳細は、ここにあります : JSON-To-Dualityマイグレータの構成フィールド |
GENERATE_SCHEMAファンクション
この項では、GENERATE_SCHEMA
ファンクションの構文、入力および出力形式について説明します。
概要
このファンクションは、JSONドキュメントとして表される正規化されたリレーショナル・スキーマを入力として受け取り、スキーマを生成するためのDDLスクリプトを戻します。
構文
FUNCTION GENERATE_SCHEMA(er_schema in JSON)
RETURN CLOB;
例112-2 GENERATE_SCHEMAファンクションの例
DECLARE
schema_json json;
schema_sql clob;
BEGIN
-- infer schema
schema_json :=
dbms_json_duality.infer_schema(
json('{
"tableNames" : ["EMPLOYEE_TAB", "DEPARTMENT_TAB"],
"viewNames" : ["EMPLOYEES", "DEPARTMENTS"],
"useFlexFields" : true,
"updatability" : true,
"sourceSchema" : "HR",
"targetSchema" : "HR",
"tablespace" : "HR_TBS",
"outputFormat" : "executable"
}'));
-- modify schema as needed
...
-- generate schema
schema_sql = dbms_json_duality.generate_schema(schema_json);
-- create schema
execute immediate schema_sql;
END;
/
INFER_AND_GENERATE_SCHEMAファンクション
この項では、INFER_AND_GENERATE_SCHEMA
ファンクションの構文、入力および出力形式について説明します。
概要
このファンクションは、JSONコレクションのセット(単一のJSON列を持つ表)と、JSONドキュメントとしてフォーマットされた構成パラメータを入力として受け取ります。 JSON構成ドキュメントの入力フィールドは、INFER_SCHEMA
ファンクションと同じであり、ここにリストされています。 コレクションをCLOBとして表す検証済で正規化されたリレーショナル・スキーマを生成するDDLスクリプトを戻します。
構文
FUNCTION INFER_AND_GENERATE_SCHEMA(config in JSON)
RETURN CLOB;
例112-3 INFER_AND_GENERATE_SCHEMAファンクションの例
DECLARE
schema_sql clob;
BEGIN
-- infer and generate schema
schema_sql :=
dbms_json_duality.infer_and_generate_schema(
json('{
"tableNames" : ["EMPLOYEE_TAB", "DEPARTMENT_TAB"],
"viewNames" : ["EMPLOYEES", "DEPARTMENTS"],
"useFlexFields" : true,
"updatability" : true,
"sourceSchema" : "HR",
"targetSchema" : "HR",
"tablespace" : "HR_TBS",
"outputFormat" : "executable"
}'));
-- create schema
execute immediate schema_sql;
END;
/
VALIDATE_SCHEMA_REPORTファンクション
この項では、VALIDATE_SCHEMA_REPORT
ファンクションの構文、入出力形式について説明します。
概要
VALIDATE_SCHEMA_REPORT
は、スキーマ検証のレポートを返す表ファンクションです。 GENERATE_SCHEMA
またはINFER_AND_GENERATE_SCHEMA
ファンクションによって生成されたスキーマを検証し、検証に失敗したドキュメントのレポートを生成します。 出力の各行は、単一のJSONドキュメントの検証失敗に対応します。 無効なドキュメントが見つからない場合、ファンクションは行を返しません。 VALIDATE_SCHEMA_REPORT
の出力形式は、2つのCLOB列data
およびerrors
を持つ表です。 列data
には誤ったJSONドキュメントが含まれ、列errors
にはスキーマ・エラーの配列が含まれます。 VALIDATE_SCHEMA_REPORT
のエラーの値は、JSONスキーマ検証エラーを含むJSON配列です。 配列の形式は、DBMS_JSON_SCHEMA.VALIDATE_REPORT
の出力の「errors」フィールドの形式と同じです。
構文
FUNCTION VALIDATE_SCHEMA_REPORT(
table_owner_name in VARCHAR2 DEFAULT NULL,
table_name in VARCHAR2,
view_owner_name in VARCHAR2 DEFAULT NULL,
view_name in VARCHAR2
) return validate_report_tab_t PIPELINED;
入力パラメータ
表112-1 DBMS_JSON_DUALITY.VALIDATE_SCHEMA_REPORTの入力パラメータ
パラメータ | 説明 |
---|---|
|
単一のJSON列を持つ入力表の所有者の名前。 このフィールドの値は、データ・ディクショナリに存在する表の所有者名と同じである必要があります。 そうしない場合は、現在接続しているユーザーのスキーマが使用されます。 |
|
単一のJSON列を持つ入力表の名前。 このフィールドの値は、データ・ディクショナリに存在する表名と同じである必要があります。 |
|
出力二面性ビューの所有者の名前。 このフィールドの値は、データ・ディクショナリに存在するビュー所有者名と同じである必要があります。 そうしない場合は、現在接続しているユーザーのスキーマが使用されます。 |
|
出力二面性ビューの名前。 このフィールドの値は、データ・ディクショナリに存在するビュー名と同じである必要があります。 |
例112-4 VALIDATE_SCHEMA_REPORTファンクションの例
ノート:
スキーマを検証するには、「GENERATE_SCHEMAファンクション」または「INFER_AND_GENERATE_SCHEMAファンクション」を使用してスキーマを生成したと想定されます。select * from dbms_json_duality.validate_schema_report('HR, 'EMPLOYEE_TAB', 'HR', 'EMPLOYEES');
select * from dbms_json_duality.validate_schema_report('HR, 'DEPARTMENT_TAB', 'HR', 'DEPARTMENTS');
IMPORTプロシージャ
この項では、IMPORT
プロシージャの構文、入力および出力形式について説明します。
概要
このプロシージャは、単一のJSON列を持つ表から二面性ビューにデータをインポートします。 また、インポートに失敗したドキュメントをエラー・ログに記録します。
ノート:
正規化のプロセスでは、データが変換されたり、異なるデータ型にキャストされたり、最大サイズ制限を考慮して切り捨てられることがあります。 また、結果のスキーマに準拠していないデータは、インポート・フェーズ中に拒否される場合があります。 検証テストを実行し、エラー・ログでインポート・エラーの解決を確認して、すべてのデータが正常にインポートされたことを確認することをお薦めします。構文
PROCEDURE IMPORT(table_owner_name in VARCHAR2 DEFAULT NULL,
table_name in VARCHAR2,
view_owner_name in VARCHAR2 DEFAULT NULL,
view_name in VARCHAR2,
err_log_owner_name in VARCHAR2 DEFAULT NULL,
err_log_name in VARCHAR2 DEFAULT NULL,
reject_limit in NUMBER DEFAULT NULL);
入力パラメータ・フィールド
パラメータ | 値 |
---|---|
|
単一のJSON列を持つ入力表の所有者の名前。 |
|
単一のJSON列を持つ入力表の名前。 |
|
出力二面性ビューの所有者の名前。 |
|
出力二面性ビューの名前。 |
|
正常にインポートできないドキュメントに使用するエラー・ログの所有者の名前。 |
|
使用するエラー・ログの名前。デフォルト値はNULLであるため、デフォルトではエラーは記録されません。 |
|
操作を中断する前にログに記録できるエラーの最大数を指定します。 デフォルト(NULL)は無制限であるため、 |
例112-5 IMPORTプロシージャの例
BEGIN
dbms_errlog.create_error_log(dml_table_name => 'EMPLOYEES', err_log_table_name => 'ERR$_EMP', skip_unsupported => TRUE);
dbms_errlog.create_error_log(dml_table_name => 'DEPARTMENTS', err_log_table_name => 'ERR$_DEPT', skip_unsupported => TRUE);
dbms_json_duality.import('HR', 'EMPLOYEE_TAB', 'HR', 'EMPLOYEES', 'HR', 'ERR$_EMP', 100);
dbms_json_duality.import('HR', 'DEPARTMENT_TAB', 'HR' 'DEPARTMENTS', 'HR', 'ERR$_DEPT', 100);
END;
/
IMPORT_ALLプロシージャ
この項では、IMPORT_ALL
プロシージャの構文、入力および出力の形式について説明します。
概要
IMPORT_ALL
は、複数の表から対応する二面性ビューにデータをインポートするプロシージャです。 複数のインポートが必要な場合は、外部キー制約違反のリスクを回避するために、IMPORT
プロシージャのかわりにこのプロシージャを使用する必要があります。 IMPORT_ALL
プロシージャの入力は、JSONドキュメントの形式で提供される構成オプションのセットです。 IMPORT_ALL
はプロシージャであるため、出力はありません。
PROCEDURE IMPORT_ALL(config in JSON);
表112-2 JSON構成ドキュメントの入力フィールド
フィールド | 説明 |
---|---|
|
単一のJSON列をインポートする表の名前の配列。 このフィールドの値は、データ・ディクショナリに存在する表名と同じである必要があります。 |
|
二面性ビューの名前の配列。 順序は、 |
|
この文字列パラメータは、入力表の引用符で囲まれたスキーマ名を定義します。 このフィールドの値は、データ・ディクショナリに存在するソース・スキーマと同じである必要があります。 このパラメータのデフォルト値は、現在のユーザー・スキーマです。 |
|
この文字列パラメータは、二面性ビューの引用符で囲まれたスキーマ名を定義します。 このフィールドの値は、データ・ディクショナリに存在するターゲット・スキーマと同じである必要があります。 このパラメータのデフォルト値は、現在のユーザー・スキーマです。 |
|
|
|
正常にインポートできないドキュメントに使用するエラー・ログのスキーマの名前。 所有者は |
|
操作を中断する前にログに記録できるエラーの最大数を指定します。 デフォルト(NULL)は無制限であるため、 |
ノート:
tableNames
以外のすべてのパラメータはオプションです。 INFER_SCHEMA
、INFER_AND_GENERATE_SCHEMA
およびIMPORT_ALL
は、入力としてJSON構成ドキュメントを取ります。 これらのファンクションのパラメータ・リストは異なりますが、重複しています。 ただし、ファンクションと、そのファンクションに適用されないパラメータの両方に使用できる共通の構成ドキュメントを作成することは無視されます。
例112-6 IMPORT_ALLプロシージャの例
BEGIN
dbms_errlog.create_error_log(dml_table_name => 'EMPLOYEES', err_log_table_name => 'ERR$_EMP', skip_unsupported => TRUE);
dbms_errlog.create_error_log(dml_table_name => 'DEPARTMENTS', err_log_table_name => 'ERR$_DEPT', skip_unsupported => TRUE);
dbms_json_duality.import_all(json('{"tableNames" : ["EMPLOYEE_TAB","DEPARTMENT_TAB"],
"viewNames" : ["EMPLOYEES","DEPARTMENTS"],
"sourceSchema" : "HR",
"targetSchema" : "HR",
"errorLog" : ["ERR$_EMP","ERR$_DEPT"]
}'));
END;
/
VALIDATE_IMPORT_REPORTファンクション
この項では、VALIDATE_IMPORT_REPORT
ファンクションの構文、入出力形式について説明します。
概要
VALIDATE_IMPORT_REPORT
は、インポート検証用のレポートを返す表ファンクションです。 IMPORT
およびIMPORT_ALL
ファンクションへの入力として渡されたドキュメントと、対応する二面性ビューのドキュメントを比較し、検証に失敗したドキュメントのレポートを生成します。 出力の各行は、単一のJSONドキュメントの検証失敗に対応します。 無効なドキュメントが見つからない場合、ファンクションは行を返しません。 VALIDATE_IMPORT_REPORT
の出力形式は、2つのCLOB列data
およびerrors
を持つ表です。 列data
には誤ったJSONドキュメントが含まれ、列errors
にはインポート・エラーの配列が含まれます。 VALIDATE_IMPORT_REPORT
のエラーの値は、表内の入力JSONドキュメントと二面性ビュー内の出力JSONドキュメントのJSON差異です。 diffの形式は、「JSONパッチ」の形式と同じです。
構文
FUNCTION VALIDATE_IMPORT_REPORT(
table_owner_name in VARCHAR2 DEFAULT NULL,
table_name in VARCHAR2,
view_owner_name in VARCHAR2 DEFAULT NULL,
view_name in VARCHAR2
) return validate_report_tab_t PIPELINED;
入力パラメータ
表112-3 DBMS_JSON_DUALITY.VALIDATE_IMPORT_REPORTの入力パラメータ
パラメータ | 説明 |
---|---|
|
単一のJSON列を持つ入力表の所有者の名前。 このフィールドの値は、データ・ディクショナリに存在する表の所有者名と同じである必要があります。 そうしない場合は、現在接続しているユーザーのスキーマが使用されます。 |
|
単一のJSON列を持つ入力表の名前。 このフィールドの値は、データ・ディクショナリに存在する表名と同じである必要があります。 |
|
出力二面性ビューの所有者の名前。 このフィールドの値は、データ・ディクショナリに存在するビュー所有者名と同じである必要があります。 そうしない場合は、現在接続しているユーザーのスキーマが使用されます。 |
|
出力二面性ビューの名前。 このフィールドの値は、データ・ディクショナリに存在するビュー名と同じである必要があります。 |
例112-7 VALIDATE_IMPORT_REPORTファンクションの例
ノート:
インポートを検証するには、「IMPORTプロシージャ」またはIMPORT_ALLプロシージャを使用してデータをインポートしたと想定されます。select * from dbms_json_duality.validate_import_report('HR, 'EMPLOYEE_TAB', 'HR', 'EMPLOYEES');
select * from dbms_json_duality.validate_import_report('HR, 'DEPARTMENT_TAB', 'HR', 'DEPARTMENTS');
BEGIN_TRANSACTIONプロシージャ
この項では、BEGIN_TRANSACTION
という名前の非対話型プロシージャの構文について説明します
概要
-
トランザクションを開始します
-
ドキュメントを登録します
-
二面性ビューに対して問合せまたはDMLを実行します
-
トランザクションをコミットします
BEGIN_TRANSACTION
プロシージャは、次のプロパティを持つ特別な複数操作トランザクションを開始します:
-
複数操作トランザクションでは、繰返し可能な読取り(つまり、トランザクションの開始時にスナップショット時点で実行されるすべての読取り)が提供されます。
-
ロックは、変更された行に対してのみ実行され、変更されていない行はトランザクション全体でロックされていないままになります
構文
procedure begin_transaction;
例112-8 BEGIN_TRANSACTIONプロシージャの例
dbms_json_duality.begin_transaction()
COMMIT_TRANSACTIONプロシージャ
この項では、 COMMIT_TRANSACTION
という名前の非対話型プロシージャの構文について説明します
概要
このプロシージャは、特別な複数操作トランザクションをコミットします。 トランザクション内のすべての変更されたドキュメントを検証します。つまり、他のセッションでこれらのドキュメントが変更されていないことを確認します。
構文
procedure commit_transaction;
例112-9 COMMIT_TRANSACTIONプロシージャの例
COMMIT_TRANSACTION
プロシージャは通常、二面性ビューに対して問合せが実行された後の、非対話型トランザクションの最後のステップです。
dbms_json_duality.commit_transaction();
REGISTERプロシージャ
この項では、REGISTER
という名前の非対話型プロシージャの構文について説明します
概要
このプロシージャは、オブジェクトの現在のetag
が前の読取りから変更されていないことを確認します。 etag
が想定されたetag
と一致しない場合、このファンクションからエラーがスローされます。 登録プロシージャでは、登録および検証するオブジェクト/ドキュメントを識別するためにオブジェクトID (oid)を使用します。 オブジェクトIDは、二面性ビューからresid
非表示列を問い合せることで取得できます。 この値は、二面性ビュー内のルート表のすべての主キー列を連結したバイナリ・エンコーディングです。
構文
procedure register(view_name in VARCHAR2, /* duality view name */
oid in RAW, /* duality view obj identifier */
etag in RAW); /* document etag */
例112-10 REGISTERプロシージャの例
この例では、二面性ビューteam_dv
がすでに作成されていることを前提としています。 二面性ビューの作成の詳細は、『Oracle Database JSONリレーショナル二面性開発者ガイド』の二面性ビューの作成を参照してください。 REGISTER
プロシージャをコールする前に、RESID
およびETAG
を取得する必要があります。 次に、二面性ビューteam_dv
のRESID
およびETAG
を取得するコードの例を示します:
SELECT RESID, DATA FROM team_dv dv
WHERE dv.DATA.name LIKE 'Mercedes%';
これにより、次に示すように、oid
(RESID
)およびETAG
情報を含む出力が生成されます:
RESID
-----
DATA
----
FB03C2040400
{"_id" : 303,
"_metadata":
{"etag" : "039A7874ACEE6B6709E06E42E4DC6355",
"asof" : "00000000001BE239"},
"name" : "Mercedes",
...}
BEGIN
DBMS_JSON_DUALITY.begin_transaction();
DBMS_JSON_DUALITY.register('team_dv',
hextoraw('FB03C2040400'),
hextoraw('039A7874ACEE6B6709E06E42E4DC6355'));
.............................................
****Perform the updating (DML) operations****
.............................................
DBMS_JSON_DUALITY.commit_transaction();
END