程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 通過緩存數據庫結果提高PHP性能(2)

通過緩存數據庫結果提高PHP性能(2)

編輯:關於PHP編程

創建通知處理程序
  現在,您可以創建一個通知處理程序,它將借助於上面介紹的 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
表中被修改的行發出的通知。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved