システムパッケージDBMS_の使用ALERT監視表

1475 ワード

DBMS_ALERTは非同期取得データベースイベントをサポートする.
次に、そのスナップテーブルの様々な変更をテストする、テストテーブルはempである.
非同期なので、SQLPLUSウィンドウを2つ開く必要があります(2つのセッション)
最初のセッションでは、次のように記述されます.
(SCOTTユーザー権限を先に与えるように注意してね、
grant execute on dbms_alert to scott)
declare
v_n varchar2(30);
v_m varchar2(100);
v_i integer;
begin
dbms_alert.removeall;
dbms_alert.register('emp_table_alert');
dbms_alert.waitany(v_n,v_m,v_i);
if l_i=0 then
dbms_output.put_line('[name:]'||l_n);
dbms_output.put_line('[msg:]'||l_m);
end if;
dbms_alert.removeall;
end;
/

このストレージ・プロシージャを実行すると、セッションは待機状態になります.の
sqlplusを再開し、トリガを次のようにします.
create or replace trigger emtring
after insert or update or delete on emp
begin
dbms_alert.signal('emp_table_alert',to_char(sysdate,'yyyymmdd')||':table emp is changed');
end;

dbms_alert.Signalはアラートを送信するために使用され、このセッションではinsertなどのいくつかの変更が行われます.
 insert into emp(empno,ename) values(1234,'w001');
 commit;

注意は必ずcommit;DBMS_ALERTは、トランザクションに基づくものである.
commitでは、最初のSQLPLUSのセッションの待機状態が終了し、出力結果は次のようになります.
10:18:18 SCOTT@orcl> /
[name:]EMP_TABLE_ALERT
[msg:]20121212:table emp is changed

 
このパッケージは一般的に開発に用いられ、アプリケーションでDBで発生する各種アラームをキャプチャして処理する.