【问题标题】:Sybase DB SQL Anywhere - push notifications on database changesSybase DB SQL Anywhere - 关于数据库更改的推送通知
【发布时间】: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


【解决方案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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多