我想在请求期间检查是否遵守约束,如果它们不是发送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
答案 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;