Как создать с условием и выбрать? - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу сделать что-то вроде этого:

Кто-то создает клиента, и если ct уже существует, поэтому мы проверяем, совпадает ли 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 голосов
/ 26 февраля 2019

Вы можете искать клиента с тем же ct и другим cn в одном запросе:

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

Сгенерированное исключение должно прервать INSERT для любого типа триггера.Но, учитывая, что это проверка, я бы создал триггер как BEFORE INSERT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...