Как удалить строки из моей customer
таблицы в зависимости от значений из другой таблицы, скажем, orders
?
Если у клиента нет активных заказов, они должны быть удалены из БД вместе со своими строками (выполняется с использованием CASCADE
). Однако, если у них вообще есть активные ордера, их нельзя удалить.
Я думал о функции PLPG SQL, а затем использовал ее в триггере для проверки, но я потерялся. У меня есть базовый c блок из SQL, показанный ниже, моей первой идеи по удалению записи соответственно. Но он не работает должным образом, поскольку он удаляет клиента независимо от статуса, для этой функции нужен только один отмененный заказ, а не все отмененные.
CREATE OR REPLACE FUNCTION DelCust(int)
RETURNS void AS $body$
DELETE FROM Customer
WHERE CustID IN (
SELECT CustID
FROM Order
WHERE Status = 'C'
AND CustID = $1
);
$body$
LANGUAGE SQL;
SELECT * FROM Customer;
Я также пробовал использовать PLPG SQL функция возвращает триггер, а затем использует триггер, чтобы помочь с удалением и проверками, но я потерялся в этом. Есть мысли, как это исправить? Есть ли хорошие источники для дальнейшего чтения?