0

我试图弄清楚如何在 PL/pgSQL 中编写一个触发器函数,该函数可以将值选择到嵌入式 SQL/C 程序中的主变量中。我是 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

触发函数在服务端环境中执行,不能访问客户端环境的内存空间,既不能读也不能写。这是客户端-服务器架构的一个基本点,所以没有变通方法,这是不可能的。

更接近可行的等效项可能是触发器通知通知和客户端侦听并使用通知和关联的有效负载。

于 2013-05-28T20:19:26.723 回答