Функция проверки ограничений SQL
Я хочу во время запроса проверить, соблюдаются ли ограничения, если они не отправляют сообщение об ошибке, просто возвращают FALSE. Как бы я это сделал?
Пример таблицы, которую я использую:
CREATE TABLE tree (
name VARCHAR(64) UNIQUE PRIMARY KEY,
leaf INT CHECK (leaf > 0)
);
Пример функций, которые я бы использовал:
CREATE FUNCTION add_tree(name, nb_leaf) RETURNS BOOLEAN;
CREATE FUNCTION remove_leaf(tree_name, leaf_to_remove) RETURNS BOOLEAN;
В моей функции было бы слишком повторным, чтобы проверить имя
IF EXISTS (SELECT name FROM tree WHERE name=tree_name) THEN...
Поскольку у меня уже есть УНИКАЛЬНОЕ ограничение, но если я не проверяю, я, конечно, получаю сообщение об ошибке, как я не использую проверку (IF..) и не получаю сообщение об ошибке, а вместо этого возвращает false, когда ввод неправильно?
PS: я использую postgresql, если это что-то меняет
1 ответ
Решение
Когда возникнет исключение, верните false из вашей функции:
EXCEPTION
WHEN OTHERS THEN
return false;
END;
http://www.postgresql.org/docs/9.3/static/plpgsql-control-structures.html
В конце страницы вы увидите пример:
DECLARE
text_var1 text;
text_var2 text;
text_var3 text;
BEGIN
-- some processing which might cause an exception
...
EXCEPTION WHEN OTHERS THEN
GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT,
text_var2 = PG_EXCEPTION_DETAIL,
text_var3 = PG_EXCEPTION_HINT;
END;