2013-06-12 49 views
3

我有一個關於我必須使用的數據庫系統的問題: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服務請求?

+1

你看過使用更新觸發器和SQLAnywhere Web服務嗎? –

+0

感謝您的回覆 - 查看更新後的問題:) –

回答

1

所以我終於明白了我自己。問題是,過程調用必須使用http請求的響應。因此,它沒有任何實際的光標,我以爲......

對於那些,誰也有類似的問題,這裏就是答案:http://sqlanywhere-forum.sap.com/questions/12665/sql-trigger-http-get-procdure

這裏是我的解決方案:

SET tmp = (SELECT C2 From proc_http_post(adr.AdrId) with (C1 long varchar,C2 long varchar) WHERE C1 = 'Body');