Функция проверки ограничений 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;
Другие вопросы по тегам