DBMS_ALERT モジュール

DBMS_ALERT モジュールは、アラートの登録、アラートの送受信を行うための一連のプロシージャーを備えています。

アラートは、SYSTOOLS.DBMS_ALERT_INFO に保管されます。これは、データベースごとに初めてこのモジュールを 参照する際に SYSTOOLSPACE に作成されます。

このモジュールのスキーマは SYSIBMADM です。

DBMS_ALERT モジュールには、以下の組み込みルーチン が含まれています。

表 1. DBMS_ALERT モジュールで使用可能な組み込みルーチン
ルーチン名 説明
REGISTER プロシージャー 現行セッションを登録して指定されたアラートを受信します。
REMOVE プロシージャー 指定されたアラートの登録を除去します。
REMOVEALL プロシージャー すべてのアラートの登録を除去します。
SIGNAL プロシージャー 指定されたアラートのオカレンスをシグナル通知します。
SET_DEFAULTS プロシージャー WAITONE および WAITANY プロシージャーのポーリング間隔を設定します。
WAITANY プロシージャー 任意の登録済みアラートの発生を待機します。
WAITONE プロシージャー 指定したアラートの発生を待機します。

使用上の注意

DBMS_ALERT モジュールのプロシージャーは、 特定のイベント用にアラートを送信する場合に役立ちます。 例えば、1 つ以上の表に対する変更の結果、 トリガーがアクティブ化されるときに、アラートを送信したい場合があります。

SYSTOOLSPACE 表スペースの中に SYSTOOLS.DBMS_ALERT_INFO 表を正常に作成するには、DBMS_ALERT モジュールの初回実行時に CREATETAB 権限が付与されていなければなりません。

トリガー、TRIG1 がアクティブ化される場合、接続 1 から接続 2 にアラートを送信します。 まず、表およびトリガーを作成します。

CREATE TABLE T1 (C1 INT)@

CREATE TRIGGER TRIG1
AFTER INSERT ON T1
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN ATOMIC
CALL DBMS_ALERT.SIGNAL( 'trig1', NEW.C1 );
END@

接続 1 から INSERT ステートメントを発行します。

INSERT INTO T1 values (10)@
-- Commit to send messages to the listeners (required in early program)
CALL DBMS_ALERT.COMMIT()@

接続 2 から trig1 という名のアラートを受信するように登録し、 アラートを待機します。


CALL DBMS_ALERT.REGISTER('trig1')@
CALL DBMS_ALERT.WAITONE('trig1', ?, ?, 5)@

この例では、以下の出力が結果として戻ります。

  Value of output parameters
  --------------------------
  Parameter Name  : MESSAGE
  Parameter Value : -

  Parameter Name  : STATUS
  Parameter Value : 1

  Return Status = 0