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 :=''});
注意: このプロシージャはオーバーロードされています。 |
パラメータ
パラメータ | 説明 |
---|---|
schema_name |
ストアド・プロシージャが置かれたスキーマの名前です。 |
package_name |
ストアド・プロシージャを含むパッケージの名前です。ストアド・プロシージャはパッケージの一部になります。スタンドアロン・プロシージャへの遅延コールはサポートされていません。 |
proc_name |
コールを遅らせる、リモート・プロシージャの名前です。 |
arg_count |
プロシージャのパラメータ数です。これらの各パラメータにつき1回、 注意: パラメータの一部がデフォルトである場合でも、プロシージャのパラメータをすべて数に含める必要があります。 |
nodes |
遅延コールを伝播する、完全修飾されたデータベース名のPL/SQL索引付き表です。表の索引付けは、1の位置から始まり、 |
group_name |
内部使用に予約されています。 |
例外
表12-3 CALLプロシージャの例外
例外 | 説明 |
---|---|
ORA-23304 (malformedcall) |
引数の数が正しくありません。 |
ORA-23319 |
パラメータ値が無効です。 |
ORA-23352 |
|
このプロシージャは、正しく定義された遅延リモート・プロシージャ・コールのチェック後に、トランザクションのコミットを実行します。
構文
DBMS_DEFER.COMMIT_WORK ( commit_work_comment IN VARCHAR2);
パラメータ
例外
表12-5 COMMIT_WORKプロシージャの例外
例外 | 説明 |
---|---|
ORA-23304 (malformedcall) |
トランザクションの形式が正しくなかったか、またはトランザクションが正常に終了しませんでした。 |
このプロシージャは、遅延リモート・プロシージャ・コールに渡すデータを提供します。遅延リモート・プロシージャに渡す必要があるデータ型に応じて、次に示すプロシージャのいずれかをコールする必要があります。
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);
パラメータ
例外
このプロシージャは、新しい遅延トランザクションの開始を示します。このコールを省略した場合、DBMS_DEFER
.CALL
への最初のコールが、新しいトランザクションの開始とみなされます。
構文
DBMS_DEFER.TRANSACTION ( nodes IN node_list_t);
注意: このプロシージャはオーバーロードされています。入力パラメータがない場合の動作は、入力パラメータがある場合の動作と似ています。ただし、前者では、ノード・パラメータのノードではなく、 |
パラメータ
表12-8 TRANSACTIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
nodes |
トランザクションの遅延コールを伝播する完全修飾されたデータベース名の、PL/SQL索引付き表です。表の索引付けは、1の位置から始まり、 |
例外