我想做这样的事情:
有人创建了一个客户,如果ct已经存在,那么我们检查cn是否相同,如果cn不相同,则会引发错误,但它不起作用并且会花费很多时间。
CREATE OR REPLACE FUNCTION existingCT()
RETURNS trigger AS $$ BEGIN
IF ((SELECT COUNT(*) FROM customer WHERE ct= NEW.ct)!= 0) THEN
IF( (SELECT COUNT(*) FROM customer WHERE ct= NEW.ct) != (SELECT count(*) FROM customer WHERE ct= NEW.ct AND cn= NEW.cn)) THEN
RAISE EXCEPTION 'This ct already exist for a cn';
END IF;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql ;
答案 0 :(得分:1)
您可以在一个查询中查找具有相同ct
和不同cn
的客户:
IF EXISTS (SELECT * FROM customer WHERE ct = NEW.ct AND cn <> NEW.cn) THEN
对于任何类型的触发器,抛出的异常都应中止INSERT
。但是考虑到检查,我将触发器创建为BEFORE INSERT
。