DBMS_ALERT モジュール
DBMS_ALERT モジュールは、アラートの登録、アラートの送受信を行うための一連のプロシージャーを備えています。
アラートは、SYSTOOLS.DBMS_ALERT_INFO に保管されます。これは、データベースごとに初めてこのモジュールを 参照する際に SYSTOOLSPACE に作成されます。
このモジュールのスキーマは SYSIBMADM です。
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