SQL约束验证函数

时间:2016-03-22 12:00:54

标签: sql postgresql constraints unique-constraint check-constraints

我想在请求期间检查是否遵守约束,如果它们不是发送ERROR消息,则只返回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...

因为我已经有了一个UNIQUE约束,但是如果我不检查我当然得到了错误消息,我怎么不使用check(IF ..)而不是获取错误消息但是返回false而不是输入错了?

PS:如果改变了什么,我正在使用postgresql

1 个答案:

答案 0 :(得分:0)

引发异常时,从函数返回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;