繁体   English   中英

检查PostgreSQL中的返回查询中是否存在值

[英]Check if a value exists in a return query in postgresql

我是Postgresql的新手。 我做了一个触发器,该触发器在插入表之后启用。 我的表中有1个值,其中start_date为1个日期值,end_date为1个日期。 当我在表格中插入新行时,我想检查是否与任何现有日期重叠。 所以我的触发条件如下:

CREATE OR REPLACE FUNCTION insert_new() 
RETURNS TRIGGER AS $$ 
BEGIN
    if ( 't' = any (select ((NEW.start_date, NEW.end_date) overlaps (start_date, end_date)) from "mytable") ) then 
        RAISE EXCEPTION 'Invalid insertion!';
    else 
        return NEW;
    end if;
END;
$$ LANGUAGE plpgsql; 

这似乎对我来说是正确的,但是当我尝试在表中插入新行时,每次都出现异常。 我不明白为什么会这样。 提前致谢..

这是创建触发代码:

CREATE TRIGGER check_insert 
AFTER INSERT ON "mytable"
FOR EACH ROW 
WHEN (NEW.status = 'current')
EXECUTE PROCEDURE insert_new();
CREATE TRIGGER check_insert 
BEFORE INSERT ON "mytable"
FOR EACH ROW 
WHEN (NEW.status = 'current')
EXECUTE PROCEDURE insert_new();

您可以执行AFTER INSERT检查,删除触发器,然后使用BEFORE而不是AFTER进行创建,然后再次尝试插入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM