DBMS_DEFERは、レプリケート・トランザクション遅延リモート・プロシージャ・コール機能のユーザー・インタフェースです。レプリケート・アプリケーションは、このインタフェースのコールを使用して、リモート・ノードでの後のトランザクション実行のためにプロシージャ・コールをキューに入れます。
通常こうしたプロシージャは、行トリガーの後、またはアプリケーション固有の更新プロシージャの後でコールされます。
この章には、次の項が含まれます。
表12-1 DBMS_DEFERパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
|
リモート・プロシージャへの遅延コールを作成します。 |
|
|
正しく定義された遅延リモート・プロシージャ・コールのチェック後に、トランザクションのコミットを実行します。 |
|
|
遅延リモート・プロシージャ・コールに渡されるデータを提供します。 |
|
|
新しい遅延トランザクションの開始を示します。 |
このプロシージャは、リモート・プロシージャへの遅延コールを作成します。
構文
DBMS_DEFER.CALL (
schema_name IN VARCHAR2,
package_name IN VARCHAR2,
proc_name IN VARCHAR2,
arg_count IN NATURAL,
{ nodes IN node_list_t
| group_name IN VARCHAR2 :=''});
|
注意: このプロシージャはオーバーロードされています。nodesパラメータとgroup_nameパラメータは、同時には指定できません。 |
パラメータ
| パラメータ | 説明 |
|---|---|
schema_name |
ストアド・プロシージャが置かれたスキーマの名前です。 |
package_name |
ストアド・プロシージャを含むパッケージの名前です。ストアド・プロシージャはパッケージの一部になります。スタンドアロン・プロシージャへの遅延コールはサポートされていません。 |
proc_name |
コールを遅らせる、リモート・プロシージャの名前です。 |
arg_count |
プロシージャのパラメータ数です。これらの各パラメータにつき1回、 注意: 一部のパラメータがデフォルトである場合でも、プロシージャのパラメータをすべて数に含める必要があります。 |
nodes |
遅延コールを伝播する、完全修飾されたデータベース名のPL/SQL連想配列です。表の索引付けは、1の位置から始まり、 |
group_name |
内部使用に予約されています。 |
このプロシージャは、遅延リモート・プロシージャ・コールに渡すデータを提供します。遅延リモート・プロシージャに渡す必要があるデータ型に応じて、次に示すプロシージャのいずれかをコールする必要があります。
DBMS_DEFER.CALLを実行した後、プロシージャの各パラメータを、datatype_ARGプロシージャを使用して指定する必要があります。すなわち、遅延リモート・プロシージャ・コールにはデフォルト・パラメータを使用できません。たとえば、次のようなプロシージャがあるとします。
CREATE OR REPLACE PACKAGE my_pack AS PROCEDURE my_proc(a VARCHAR2, b VARCHAR2 DEFAULT 'SALES'); END; /
DBMS_DEFER.CALLプロシージャを実行するときは、パラメータごとに個別のプロシージャ・コールをmy_procプロシージャに組み込む必要があります。
CREATE OR REPLACE PROCEDURE load_def_tx IS
node DBMS_DEFER.NODE_LIST_T;
BEGIN
node(1) := 'MYCOMPUTER.EXAMPLE.COM';
node(2) := NULL;
DBMS_DEFER.TRANSACTION(node);
DBMS_DEFER.CALL('PR', 'MY_PACK', 'MY_PROC', 2);
DBMS_DEFER.VARCHAR2_ARG('TEST');
DBMS_DEFER.VARCHAR2_ARG('SALES'); -- required, cannot omit to use default
END;
/
|
注意:
|
構文
DBMS_DEFER.ANYDATA_ARG (arg IN ANYDATA); DBMS_DEFER.NUMBER_ARG (arg IN NUMBER); DBMS_DEFER.DATE_ARG (arg IN DATE); DBMS_DEFER.VARCHAR2_ARG (arg IN VARCHAR2); DBMS_DEFER.CHAR_ARG (arg IN CHAR); DBMS_DEFER.ROWID_ARG (arg IN ROWID); DBMS_DEFER.RAW_ARG (arg IN RAW); DBMS_DEFER.BLOB_ARG (arg IN BLOB); DBMS_DEFER.CLOB_ARG (arg IN CLOB); DBMS_DEFER.NCLOB_ARG (arg IN NCLOB); DBMS_DEFER.NCHAR_ARG (arg IN NCHAR); DBMS_DEFER.NVARCHAR2_ARG (arg IN NVARCHAR2); DBMS_DEFER.ANY_CLOB_ARG (arg IN CLOB); DBMS_DEFER.ANY_VARCHAR2_ARG (arg IN VARCHAR2); DBMS_DEFER.ANY_CHAR_ARG (arg IN CHAR); DBMS_DEFER.IDS_ARG (arg IN DSINTERVAL_UNCONSTRAINED); DBMS_DEFER.IYM_ARG (arg IN YMINTERVAL_UNCONSTRAINED); DBMS_DEFER.TIMESTAMP_ARG (arg IN TIMESTAMP_UNCONSTRAINED); DBMS_DEFER.TSLTZ_ARG (arg IN TIMESTAMP_LTZ_UNCONSTRAINED); DBMS_DEFER.TSTZ_ARG (arg IN TIMESTAMP_TZ_UNCONSTRAINED);