ヘッダーをスキップ
Oracle® Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス
12cリリース1 (12.1)
E52979-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

12 DBMS_DEFER

DBMS_DEFERは、レプリケート・トランザクション遅延リモート・プロシージャ・コール機能のユーザー・インタフェースです。レプリケート・アプリケーションは、このインタフェースのコールを使用して、リモート・ノードでの後のトランザクション実行のためにプロシージャ・コールをキューに入れます。

通常こうしたプロシージャは、行トリガーの後、またはアプリケーション固有の更新プロシージャの後でコールされます。

この章には、次の項が含まれます。

DBMS_DEFERサブプログラムの概要

表12-1 DBMS_DEFERパッケージのサブプログラム

サブプログラム 説明

「CALLプロシージャ」


リモート・プロシージャへの遅延コールを作成します。

「COMMIT_WORKプロシージャ」


正しく定義された遅延リモート・プロシージャ・コールのチェック後に、トランザクションのコミットを実行します。

datatype_ARGプロシージャ」


遅延リモート・プロシージャ・コールに渡されるデータを提供します。

「TRANSACTIONプロシージャ」


新しい遅延トランザクションの開始を示します。


CALLプロシージャ

このプロシージャは、リモート・プロシージャへの遅延コールを作成します。

構文

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パラメータは、同時には指定できません。

パラメータ

表12-2 CALLプロシージャのパラメータ

パラメータ 説明
schema_name

ストアド・プロシージャが置かれたスキーマの名前です。

package_name

ストアド・プロシージャを含むパッケージの名前です。ストアド・プロシージャはパッケージの一部になります。スタンドアロン・プロシージャへの遅延コールはサポートされていません。

proc_name

コールを遅らせる、リモート・プロシージャの名前です。

arg_count

プロシージャのパラメータ数です。これらの各パラメータにつき1回、DBMS_DEFER.datatype_ARGへのコールが必要です。

注意: 一部のパラメータがデフォルトである場合でも、プロシージャのパラメータをすべて数に含める必要があります。

nodes

遅延コールを伝播する、完全修飾されたデータベース名のPL/SQL連想配列です。表の索引付けは、1の位置から始まり、NULLエントリが見つかるまで、またはno_data_found例外が発生するまで続行されます。表内のデータには、大文字と小文字の区別がありません。このパラメータはオプションです。

group_name

内部使用に予約されています。


例外

表12-3 CALLプロシージャの例外

例外 説明
ORA-23304 (malformedcall)

引数の数が正しくありません。

ORA-23319

パラメータ値が無効です。

ORA-23352

nodes、または前のDBMS_DEFER.TRANSACTIONコールで指定された接続先リストに重複があります。


COMMIT_WORKプロシージャ

このプロシージャは、正しく定義された遅延リモート・プロシージャ・コールのチェック後に、トランザクションのコミットを実行します。

構文

DBMS_DEFER.COMMIT_WORK (
   commit_work_comment IN VARCHAR2);

パラメータ

表12-4 COMMIT_WORKプロシージャのパラメータ

パラメータ 説明
commit_work_comment

SQLのCOMMIT COMMENT文に相当します。


例外

表12-5 COMMIT_WORKプロシージャの例外

例外 説明
ORA-23304 (malformedcall)

トランザクションの形式が正しくなかったか、またはトランザクションが正常に終了しませんでした。


datatype_ARGプロシージャ

このプロシージャは、遅延リモート・プロシージャ・コールに渡すデータを提供します。遅延リモート・プロシージャに渡す必要があるデータ型に応じて、次に示すプロシージャのいずれかをコールする必要があります。

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;
/

注意:

  • ANYDATA_ARGプロシージャは、ユーザー定義型のオブジェクト・タイプ、コレクションおよびREFをサポートしています。ANYDATAデータ型の詳細は、『Oracle Database SQL言語リファレンス』および『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

  • このプロシージャは日時データ型および期間データ型の略称を使用します。たとえば、TIMESTAMP WITH TIME ZONEデータ型にはTSTZが使用されます。これらの略称の詳細は、「日時データ型および期間データ型の略称」を参照してください。


構文

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);

パラメータ

表12-6 datatype_ARGプロシージャのパラメータ

パラメータ 説明
arg

以前コールを遅延したリモート・プロシージャに渡すパラメータ値です。


例外

表12-7 datatype_ARGプロシージャの例外

例外 説明
ORA-23323

引数値が長すぎます。


TRANSACTIONプロシージャ

このプロシージャは、新しい遅延トランザクションの開始を示します。このコールを省略した場合、DBMS_DEFER.CALLへの最初のコールが、新しいトランザクションの開始とみなされます。

構文

DBMS_DEFER.TRANSACTION (
   nodes  IN   node_list_t);

注意:

このプロシージャはオーバーロードされています。入力パラメータがない場合の動作は、入力パラメータがある場合の動作と似ていますが、前者では、ノード・パラメータのノードではなく、DEFDEFAULTDEST ビューのnodesを使用します。

パラメータ

表12-8 TRANSACTIONプロシージャのパラメータ

パラメータ 説明
nodes

トランザクションの遅延コールを伝播する、完全修飾されたデータベース名のPL/SQL連想配列です。表の索引付けは、1の位置から始まり、NULLエントリが見つかるまで、またはno_data_found例外が発生するまで続行されます。表内のデータには、大文字と小文字の区別がありません。


例外

表12-9 TRANSACTIONプロシージャの例外

例外 説明
ORA-23304 (malformedcall)

前のトランザクションの形式が正しくなかったか、または前のトランザクションが正常に終了しませんでした。

ORA-23319

パラメータ値が無効です。

ORA-23352

ノード・リストに重複が存在するときに、DBMS_DEFER.CALLによって発生します。