首页 > php与数据库 > 通过缓存数据库结果提高PHP性能(2)

通过缓存数据库结果提高PHP性能(2)

创建通知处理程序 

  现在,您可以创建一个通知处理程序,它将借助于上面介绍的 sendNotification 

过程向客户端发送更改通知。来看一看“清单 2”中的 PL/SQL 过程 orders_nf_callback。

  清单 2. 

处理对 OE.ORDERS 表所做更改的通知的通知处理程序 

CREATE OR REPLACE PROCEDURE orders_nf_callback (ntfnds IN SYS.CHNF$_DESC) IS 

tblname VARCHAR2(60); 

numtables NUMBER; 

event_type NUMBER; 

row_id VARCHAR2(20); 

numrows NUMBER; 

ord_id VARCHAR2(12); 

url VARCHAR2(256) := 'http://webserverhost/phpcache/dropResults.php?order_no='; 

BEGIN 

event_type := ntfnds.event_type; 

numtables := ntfnds.numtables; 

IF (event_type = DBMS_CHANGE_NOTIFICATION.EVENT_OBJCHANGE) THEN 

FOR i IN 1..numtables LOOP 

tblname := ntfnds.table_desc_array(i).table_name; 

IF (bitand(ntfnds.table_desc_array(i).opflags,  

DBMS_CHANGE_NOTIFICATION.ALL_ROWS) = 0) THEN 

numrows := ntfnds.table_desc_array(i).numrows; 

ELSE 

numrows :=0; 

END IF; 

IF (tblname = 'OE.ORDERS') THEN 

FOR j IN 1..numrows LOOP 

row_id := ntfnds.table_desc_array(i).row_desc_array(j).row_id; 

SELECT order_id INTO ord_id FROM orders WHERE rowid = row_id; 

sendNotification(url, tblname, ord_id);  

END LOOP; 

END IF; 

END LOOP; 

END IF; 

COMMIT; 

END; 

  如“清单 2”所示,此通知处理程序将 SYS.CHNF$_DESC 

对象用作参数,然后使用它的属性获取该更改的详细信息。在该示例中,此通知处理程序将只处理数据库为响应对注册对象进行的 DML 或 DDL 

更改(也就是说,仅当通知类型为 EVENT_OBJCHANGE 

时)而发布的通知,并忽略有关其他数据库事件(如实例启动或实例关闭)的通知。从以上版本开始,处理程序可以处理针对 OE.ORDERS 

表中每个受影响的行发出的更改通知。在本文后面的“将表添加到现有注册”部分中,您将向处理程序中添加几行代码,以便它可以处理针对 OE.ORDER_ITEMS 

表中被修改的行发出的通知。


本文地址:http://www.phprm.com/database/bcc5253fc16d95e62434e2e306e4e799.html

转载随意,但请附上文章地址:-)

标签:none

发表留言