sql - 达到触发函数postgreSQL中的参数
问题描述
我正在尝试在插入之前编写触发器以检查参数是否符合要求。我尝试了很多事情,如果我对 d 和 e 的值进行硬编码,它会按预期工作,并在 e!=d 的情况下引发错误。但是当我用 NEW 变量替换它时它不起作用。带有触发器的表具有列 id 和 languagetag_id。你能告诉我我做错了什么吗?
CREATE or replace FUNCTION insert_name() RETURNS trigger AS $insert_name$
declare d int;
declare e int;
begin
d = (select distinct languagetagid from "scheme".table1 as a
left join "scheme".table2 as b on (a.id = b.country_id )
where b.id = NEW.id);
e = NEW.languagetag_id;
IF ( e != d ) THEN
RAISE EXCEPTION 'error: % ', e;
END IF;
RETURN NULL;
END;
$insert_name$ LANGUAGE plpgsql;
CREATE TRIGGER insert_name BEFORE INSERT or UPDATE ON "scheme".table
EXECUTE PROCEDURE insert_name();
解决方案
要访问NEW
andOLD
值,必须为每一行而不是整个语句执行触发器
CREATE TRIGGER insert_name BEFORE INSERT or UPDATE ON "scheme".table
FOR EACH ROW EXECUTE PROCEDURE insert_name();
推荐阅读
- node.js - Newrelic 动态覆盖应用程序名称
- android - Gradle Build 使用 proguard 失败
- java - 过滤 apache 光束中的 Pcollections
- python - 数据框连接多个列,并在 pyspark 中的列上有一些条件
- php - “必须安装/启用 PHP Fileinfo 扩展才能使用干预图像。” 错误
- django - 假设有 4 个不同的数据部门,我如何为网页构建我的 django 代码
- shell - 使用嵌套三通不会产生好的结果
- c# - 来自嵌入资源的 Xamarin 表单按钮图像
- java - 使用当前实例 - Java
- tcp-ip - 阅读 TCP/IP 插图时遇到的麻烦第 1 卷,第一版:第 19.4 节