通過快取資料庫結果提高PHP效能(2)

來源:互聯網
上載者:User
建立通知處理常式
  現在,您可以建立一個通知處理常式,它將藉助於上面介紹的 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
表中被修改的行發出的通知。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.