gpt4 book ai didi

sql - Sybase DB SQL Anywhere - 推送数据库更改通知

转载 作者:可可西里 更新时间:2023-11-01 16:21:59 26 4
gpt4 key购买 nike

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

问题是,我想在应用程序 B 中获得有关特定表中数据库更改的通知,而不是一直轮询应用程序 B 的更新...

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

理想情况下,Sybase 数据库服务器计数只是在特定 URL 上执行 HTTP POST 以获得通知。在这个回调中,我可以使应用程序 B 的缓存失效,因此应用程序 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 服务请求?

最佳答案

所以我终于自己弄明白了。问题是,过程调用必须使用 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');

关于sql - Sybase DB SQL Anywhere - 推送数据库更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17068450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com