Написать триггер и функцию на pl/sql
Есть таблица cars с атрибутами id, location_id(внешний ключ на атрибут id другой таблицы location). Я хочу написать функцию и триггер, которые будут работать так -при попытке обновить location_id у элемента с указанным id,если location_id и/или id не существуют то на консоль выходит ошибка типа - 'не существует id с таким значением'. Пример запроса - update cars set location_id=10 where id=10 - элементов со значением 10 нет в моей таблице Что я написал -
CREATE OR REPLACE FUNCTION update_cars()
RETURNS TRIGGER AS $$
BEGIN
-- Проверяем существование значения location_id в таблице location
IF NOT EXISTS (SELECT 1 FROM location WHERE id = NEW.location_id) THEN
RAISE EXCEPTION 'Invalid location_id: %', NEW.id;
END IF;
-- Проверяем существование значения id в таблице cars
IF NOT EXISTS (SELECT 1 FROM cars WHERE id = NEW.id) THEN
RAISE EXCEPTION 'Invalid id: %', NEW.id;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER update_cars_trigger
before UPDATE ON cars
FOR EACH ROW
EXECUTE FUNCTION update_cars();
В чем проблема - если я указываю только несуществующий location_id то функция выдает ошибку о том, что нет такого id у location, как я и хотел, но если я также указываю несуществующий id или только несуществующий id, то на консоль после попытке обновления выходит -'update 0' - но я хочу чтобы на экран выходила ошибка как я указал в функции, как это можно сделать и почему вообще такое происходит?
update: в обоих таблицах только 3 элемента соответственно в обоих только элементы с id=1,2,3 пример с несуществующим location_id и его результат в консоли(элемент с id=1 в таблице car есть, а с id=10 в таблице location нет
update cars set location_id=10 where id=1;
[P0001] ОШИБКА: Invalid location_id: 10
Где: функция PL/pgSQL update_cars(), строка 5, оператор RAISE
То есть видно ,что работает как я и хотел. Теперь пример с проблемой, то есть я указываю несуществующий id у cars:
update cars set location_id=1 where id=5;
update 0;
Ошибки нет, просто ничего не происходит, хотя по логике моей функции должна вывестись ошибка