如何创建条件并进行选择?

时间:2019-02-26 13:38:37

标签: postgresql triggers

我想做这样的事情:

有人创建了一个客户,如果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 ;

1 个答案:

答案 0 :(得分:1)

您可以在一个查询中查找具有相同ct和不同cn的客户:

IF EXISTS (SELECT * FROM customer WHERE ct = NEW.ct AND cn <> NEW.cn) THEN

对于任何类型的触发器,抛出的异常都应中止INSERT。但是考虑到检查,我将触发器创建为BEFORE INSERT