扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共19页)
CONNECT / AS SYSDBA; GRANT CHANGE NOTIFICATION TO oe; GRANT EXECUTE ON DBMS_CHANGE_NOTIFICATION TO oe;确保将 init.ora 参数 job_queue_processes 设置为非零值,以便接收 PL/SQL 通知。或者,您也可以使用下面的 ALTER SYSTEM 命令:
ALTER SYSTEM SET "job_queue_processes"=2;然后,在以 OE/OE 连接后,您可以创建一个通知处理程序。但首先,您必须创建将由通知处理程序使用的数据库对象。例如,您可能需要创建一个或多个数据库表,以便通知处理程序将注册表的更改记录到其中。在以下示例中,您将创建 nfresults 表来记录以下信息:更改发生的日期和时间、被修改的表的名称以及一个消息(说明通知处理程序是否成功地将通知消息发送给客户端)。
CONNECT oe/oe; CREATE TABLE nfresults ( operdate DATE, tblname VARCHAR2(60), rslt_msg VARCHAR2(100) );在实际情况中,您可能需要创建更多表来记录通知事件以及所更改行的行 ID 等信息,但就本文而言,nfresults 表完全可以满足需要。
CREATE OR REPLACE PROCEDURE sendNotification(url IN VARCHAR2, tblname IN VARCHAR2, order_id IN VARCHAR2) IS req UTL_HTTP.REQ; resp UTL_HTTP.RESP; err_msg VARCHAR2(100); tbl VARCHAR(60); BEGIN tbl:=SUBSTR(tblname, INSTR(tblname, '.', 1, 1)+1, 60); BEGIN req := UTL_HTTP.BEGIN_REQUEST(url||order_id||'&'||'table='||tbl); resp := UTL_HTTP.GET_RESPONSE(req); INSERT INTO nfresults VALUES(SYSDATE, tblname, resp.reason_phrase); UTL_HTTP.END_RESPONSE(resp); EXCEPTION WHEN OTHERS THEN err_msg := SUBSTR(SQLERRM, 1, 100); INSERT INTO nfresults VALUES(SYSDATE, tblname, err_msg); END; COMMIT; END; /如“清单 1”所示,sendNotification 以 UTL_HTTP.BEGIN_REQUEST 函数发出的 HTTP 请求的形式向客户端发送通知消息。此 URL 包含 ORDERS 表中已更改行的 order_id。然后,它使用 UTL_HTTP.GET_RESPONSE 获取客户端发出的响应信息。实际上,sendNotification 并不需要处理客户端返回的整个响应,而是只获取一个在 RESP 记录的 reason_phrase 字段中存储的简短消息(描述状态代码)。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者