Sybase DB SQL Anywhere - 推送有关数据库更改的通知

时间:2013-06-12 14:44:28

标签: sql http caching sybase sqlanywhere

我有一个关于我必须使用的数据库系统的问题:Sybase SQL Anywhere 10.我有两个应用程序,它们都与数据库进行通信。 App A读取/写入db,而App B是一个Web应用程序,它只显示有关db的信息并缓存大量的db查询。

问题是,我希望在App B中获知有关特定表中数据库更改的信息,以便不在整个时间内从App B轮询更新...

我对SQL Anywhere 10不是很熟悉,但也许有人知道将这种功能添加到数据库服务器的方法。不幸的是必须直接在数据库服务器上,因为我无法控制App A.

理想情况下,Sybase数据库服务器计数只是对特定URL执行HTTP POST以获取通知。在此回调中,我可以使应用程序B的缓存无效,因此App B提供的缓存信息没有错误。

编辑:在@Michael的暗示之后,触发器是要走的路,我正在尝试以下方法:

在插入表格时触发的触发器:

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的错误,这意味着我正在尝试进行非法的游标操作(参见:{{3 }})。我想,这会发生,因为我想获取新插入列的id并将其作为参数传递给proc_http_post过程(adr.id)。触发器是否有可能在事务边界内发生,因此,无法访问id?

我的问题是,我怎样才能获得插入行的id以将其传递给Web服务请求?

1 个答案:

答案 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');