DBMS_ALERT內置包提供了注冊、發送和接收告警的能力。
DBMS_ALERT子程序總覽
子程序 | 說明 |
REGISTER Procedure | 從指定的告警接收消息。 |
REMOVE Procedure | 取消指定告警的通知。 |
REMOVEALL Procedure | 從注冊列表中刪除此會話的所有告警。 |
SET_DEFAULTS Procedure | 設置輪詢時間間隔。 |
SIGNAL Procedure | 發送告警信號。 |
WAITANY Procedure | 在到達超時時間之前等待接收來自會話注冊的告警的消息。 |
WAITone Procedure | 在到達超時時間之前等待接收來自指定告警的消息。 |
REGISTER Procedure
該存儲過程用于為當前會話注冊指定的告警。
語法
DBMS_ALERT.REGISTER (
name IN VARCHAR2,
cleanup IN BOOLEAN DEFAULT TRUE);
參數說明
參數 | 說明 |
name | 被注冊的告警名稱。 |
cleanup | (可選參數)指定是否對DBMS_ALERT包使用的任何現存的孤立管道進行清理。此清理僅在第一次調研REGISTER時為每個包實例化執行。默認值是TRUE。 |
示例
該示例展示了如何進行指定告警的注冊。
EXEC DBMS_ALERT.REGISTER('alert', TRUE);
REMOVE Procedure
該存儲過程用于取消指定告警的通知。
語法
DBMS_ALERT.REMOVE (
name IN VARCHAR2);
參數說明
參數 | 說明 |
name | 待從注冊列表中刪除的告警名稱。 |
示例
該示例展示了如何刪除指定的告警名稱。
EXEC DBMS_ALERT.REMOVE('alert');
REMOVEALL Procedure
該存儲過程用于從注冊列表中刪除此會話的所有告警。
語法
DBMS_ALERT.REMOVEALL;
示例
該示例展示了如何使用該存儲過程。
EXEC DBMS_ALERT.REMOVEALL;
SET_DEFAULTS Procedure
該存儲過程用于設置輪詢時間間隔。
語法
DBMS_ALERT.SET_DEFAULTS (
sensitivity IN NUMBER);
參數說明
參數 | 說明 |
sensitivity | 輪詢的時間間隔,單位為秒。 |
示例
該示例展示了如何設置輪詢的時間間隔。
EXEC DBMS_ALERT.SER_DEFAULTS(0.0001);
SIGNAL Procedure
該存儲過程用于產生一條指定名稱的告警
語法
DBMS_ALERT.SIGNAL (
event IN VARCHAR2,
message IN VARCHAR2);
參數說明
參數 | 說明 |
event | 發送消息的告警的名稱。 |
message | 告警的具體消息。 |
示例
該示例展示了如何發送一個告警消息。
EXEC DBMS_ALERT.SIGNAL('alert' ,'This is a alert message.');
WAITANY Procedure
該存儲過程用于在到達超時時間之前等待接收來自會話注冊的告警的消息。
語法
DBMS_ALERT.WAITANY (
name OUT VARCHAR2,
message OUT VARCHAR2,
status OUT INTEGER,
timeout IN NUMBER DEFAULT MAXWAIT);
參數說明
參數 | 說明 |
name | 消息所在的告警的名稱。 |
message | 告警的具體消息。 |
status | 返回的狀態碼。取值如下:
|
timeout | 等待產生告警的時間。單位為秒。 |
示例
該示例展示了兩個會話之間傳輸告警信息的過程。
-- SESSION A: register an alert and wait any
DECLARE
name VARCHAR2;
msg VARCHAR2;
status INTEGER;
BEGIN
DBMS_ALERT.REGISTER('alert', TRUE);
DBMS_ALERT.WAITANY(name, msg, status, 10);
-- Alert name is: alert
-- Alert message is: a message from tests
-- Alert status is: 0
DBMS_OUTPUT.PUT_LINE('Alert name is: ' || name);
DBMS_OUTPUT.PUT_LINE('Alert message is: ' || msg);
DBMS_OUTPUT.PUT_LINE('Alert status is: ' || status);
END;
-- SESSION B: send signal
EXEC DBMS_ALERT.SIGNAL('alert', 'This is a alert message.');
WAITONE Procedure
該存儲過程用于在到達超時時間之前等待接收來自指定告警的消息。
語法
DBMS_ALERT.WAITONE (
name IN VARCHAR2,
message OUT VARCHAR2,
status OUT INTEGER,
timeout IN NUMBER DEFAULT MAXWAIT);
參數說明
參數 | 描述 |
name | 消息所在的告警的名稱。 |
message | 告警的具體消息。 |
status | 返回的狀態碼。取值如下:
|
timeout | 等待產生告警的時間。單位為秒。 |
示例
該示例展示了在指定的告警名稱沒有消息的情況下的輸出結果,有消息的情況的輸出示例請參考WAITANY。
-- SESSION A: register an alert and wait any
DECLARE
name VARCHAR2;
msg VARCHAR2;
status INTEGER;
timeout INTEGER;
BEGIN
DBMS_ALERT.REGISTER('alert', TRUE);
DBMS_ALERT.WAITONE('alert', msg, status, 10);
-- Alert message is: a message from tests
-- Alert status is: 0
DBMS_OUTPUT.PUT_LINE('Alert message is: ' || msg);
DBMS_OUTPUT.PUT_LINE('Alert status is: ' || status);
END;
-- SESSION B: send signal
EXEC DBMS_ALERT.SIGNAL('alert', 'This is a alert message.');