0

Embedded SQL/C プログラムでホスト変数に値を選択できる PL/pgSQL でトリガー関数を作成する方法を見つけようとしています。私はSQLを初めて使用するので、用語が少しずれていたら申し訳ありません。基本的に、テーブルを変更すると、ホスト変数に格納されている値を更新するために関数がビューをトリガーする必要があります。

これは私が作成し、動作するようにテストしたビューです:

EXEC SQL CREATE VIEW idfound AS SELECT id, num FROM newtable WHERE id = 1;

これは、ホスト変数 dbID と dbNum を使用してビューを呼び出す方法です。

EXEC SQL SELECT * INTO :dbID, :dbNum FROM idfound;

作成したトリガーは次のとおりです。

EXEC SQL CREATE idTrigger AFTER INSERT OR UPDATE ON newtable 
FOR EACH ROW EXECUTE PROCEDURE idFunc();

そして、ここに私が使いたいトリガー関数があります:

EXEC SQL CREATE FUNCTION idFunc() RETURNS TRIGGER AS $idTrigger$
    BEGIN
    SELECT * INTO :dbID, :dbNum FROM idfound;
    END;
$idTrigger$ LANGUAGE plpgsql;

テスト目的で、pgAdmin III を使用しています。ホスト変数を使用しないアクション (事前定義された行の値の更新など) を実行するように関数を変更すると、それが作成されていることがわかります。ただし、ホスト変数を使用してトリガーまたはトリガー関数を作成することはできません。

現在、私はこれを一般的に達成する方法を理解しようとしているので、現在のコードが実際にはあまり機能しないことを認識しています。一般的な考え方は、トリガー関数で C のホスト変数を使用する定義済みのビューを呼び出すことです。トリガーを実装するより良い方法があれば、そのアドバイスも大歓迎です。

4

1 に答える 1

1

トリガー関数はサーバー環境で実行され、クライアント環境のメモリ空間にアクセスすることはできず、読み取りも書き込みもできません。これはクライアント サーバー アーキテクチャの基本的なポイントであるため、回避策はありません。これは不可能です。

より近い実行可能な等価物は、トリガーがNOTIFYであり、クライアントがリッスンして通知と関連するペイロードを消費することです。

于 2013-05-28T20:19:26.723 に答える