CREATE OR REPLACE TRIGGER check_customer_before_order -- Создаем или заменяем триггер
BEFORE INSERT OR UPDATE ON Orders -- Триггер срабатывает перед INSERT или UPDATE в таблице Orders
FOR EACH ROW -- Для каждой строки
DECLARE
customer_exists NUMBER; -- Объявляем переменную для хранения количества найденных клиентов
BEGIN
-- Проверяем, существует ли клиент перед вставкой или обновлением заказа.
SELECT COUNT(*) INTO customer_exists -- Считаем количество клиентов с совпадающим номером телефона
FROM Customer
WHERE phone = :NEW.submittedBy; -- :NEW.submittedBy - значение submittedBy в строке, которая добавляется или изменяется
-- Если клиент не существует, генерируем исключение.
IF customer_exists = 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'Клиент с номером телефона ' || :NEW.submittedBy || ' не существует.'); -- Выбрасываем исключение с сообщением об ошибке
END IF;
END;