我有一個關於我必須使用的數據庫系統的問題:Sybase SQL Anywhere 10.我有兩個適用的應用程序,它們都與db通信。應用程序A讀取/寫入數據庫,而應用程序B是一個Web應用程序,只顯示有關數據庫的信息並緩存許多數據庫查詢。Sybase DB SQL Anywhere - 推送數據庫更改通知
的問題是,我想在應用B有關的變化在特定的表DB獲得通知,不輪詢來自應用B的全部時間更新...
我不是很熟悉SQL Anywhere 10,但也許任何人都知道將此功能添加到數據庫服務器的方法。不幸的是必須直接在數據庫服務器上,因爲我無法控制應用程序A.
理想情況下,Sybase數據庫服務器計數只需在特定URL上執行HTTP POST即可獲取消息。在此回調中,我可以使應用程序B的緩存無效,因此應用程序B提供的緩存信息沒有錯誤。
編輯:@邁克爾的暗示後,該觸發器是要走的路,我是想以下幾點:
觸發,在表上的插入火災:
ALTER TRIGGER "insert_trigger" AFTER INSERT
ORDER 1 ON "M01"."Adresse"
REFERENCING NEW AS adr
FOR EACH ROW
BEGIN
CALL "DBA"."proc_http_post"(adr.id)
END
的 「proc_http_port」 過程:
ALTER PROCEDURE "DBA"."proc_http_post"(in id integer)
URL 'http://AppB/cache' TYPE 'HTTP:POST'
的 「proc_http_port」 過程中可能隔離工作。發生的問題是,當我想要在表中插入一列時,我得到一個SQLCODE = -187的錯誤,這意味着我試圖執行非法光標操作(請參閱:http://dcx.sybase.com/index.html#1001/en/dberen10/er-errm187.html)。我想,發生這種情況是因爲我想獲取新插入的列的id,並將其作爲參數傳遞給proc_http_post過程(adr.id)。是否有可能,觸發事件發生在事務範圍內,並且由此導致無法訪問ID?
我的問題是,我怎樣才能獲得插入的行的ID傳遞給Web服務請求?
你看過使用更新觸發器和SQLAnywhere Web服務嗎? –
感謝您的回覆 - 查看更新後的問題:) –