【发布时间】:2013-06-08 17:45:03
【问题描述】:
我有一个关于我必须使用的数据库系统的问题:Sybase SQL Anywhere 10。我有两个应用程序,它们都与数据库通信。 App A 读取/写入 db,而 App B 是一个 web 应用程序,仅显示有关 db 的信息并缓存大量 db 查询。
问题是,我想在 App B 中获得有关特定表中数据库更改的通知,而不是一直轮询来自 App B 的更新...
我对 SQL Anywhere 10 不是很熟悉,但也许有人知道将这种功能添加到数据库服务器的方法。不幸的是必须直接在数据库服务器上,因为我无法控制 App A。
理想情况下,Sybase DB 服务器计数只需在特定 URL 上执行 HTTP POST 即可获得通知。在这个回调中,我可以使 App B 的 Cache 失效,所以 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 错误,这意味着我正在尝试进行非法游标操作(请参阅:http://dcx.sybase.com/index.html#1001/en/dberen10/er-errm187.html )。我认为,发生这种情况是因为我想获取新插入列的 id 并将其作为参数传递给 proc_http_post 过程(adr.id)。是否有可能触发发生在事务边界内,因此无法访问 id?
我的问题是,我如何归档获取插入行的 id 以将其传递给 Web 服务请求?
【问题讨论】:
-
您是否考虑过使用更新触发器和 SQLAnywhere Web 服务?
-
感谢您的回复 - 请参阅更新后的问题 :)
标签: sql http caching sybase sqlanywhere