使用しなければならないデータベース システムについて質問があります。アプリ A は db の読み取り/書き込みを行いますが、アプリ B は db に関する情報を表示し、多数の db クエリをキャッシュする Web アプリです。
問題は、アプリ B からの更新を常にポーリングしないように、特定のテーブルのデータベースへの変更についてアプリ B で通知したいということです...
私は SQL Anywhere 10 にあまり詳しくありませんが、おそらくこの機能をデータベース サーバーに追加する方法を知っている人はいるでしょう。残念ながら、アプリAを制御できないため、dbサーバーに直接配置する必要があります.
理想的には、Sybase DB サーバー カウントは、特定の 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サービスリクエストに渡すにはどうすればよいですか?