Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中为触发器函数指定参数?_Sql_Postgresql - Fatal编程技术网

如何在PostgreSQL中为触发器函数指定参数?

如何在PostgreSQL中为触发器函数指定参数?,sql,postgresql,Sql,Postgresql,我有一个表needitems,如下所示: itemid qty 5 10 3 20 我编写了一个触发器,在insert/update/delete时,它将复制new记录并将其保存在表日志中:neededitems\u log 问题是我还需要知道productid。这些信息在执行插入/更新/删除操作的函数中是不可靠的。。。但是在触发器中,我无法访问它。插入/更新/删除的函数如何将变量传递给触发器? 如果做不到我能做什么 用上面的例子 假设函数X确实将prod

我有一个表
needitems
,如下所示:

itemid   qty 
  5       10
  3       20
我编写了一个触发器,在insert/update/delete时,它将复制new记录并将其保存在表日志中:
neededitems\u log

问题是我还需要知道productid。这些信息在执行插入/更新/删除操作的函数中是不可靠的。。。但是在触发器中,我无法访问它。插入/更新/删除的函数如何将变量传递给触发器? 如果做不到我能做什么

用上面的例子

假设函数X确实将productid 5555的itemid从数量10更新到数量15。。。我想要这个 需要EditEMS\u日志来显示:

itemid   qty productid
  5       15   5555

无法将参数动态传递给触发器。这是不可能的任何清洁机制。很少有丑陋的方法——会话变量和其他方法,但我无法给出建议。如果您觉得有必要为触发器添加额外的参数,那么您的设计是错误的。所以不要这样做

当触发器很轻时,它们很好-触发器应该主要用于检查和审核。当您需要更复杂的工作时,应该使用经典函数。功能参数化更强,可维护性更好。太复杂的触发器是位陷阱,通常是大失败

如果您真的需要它,那么会话变量比其他丑陋的解决方案错误更少:

postgres=# do $$
begin
  perform set_config('custom.var1', 10::text, true);
  raise notice 'session variable var1 = %', current_setting('custom.var1');
end;
$$;
NOTICE:  00000: session variable var1 = 1
DO