SQL约束验证函数
SQL Constraint Verification Function
我想在请求期间检查是否遵守约束,如果不遵守则发送 ERROR 消息,只需 return FALSE。我该怎么做?
我正在使用的 TABLE 示例:
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 约束,但是如果我不检查我当然会得到错误消息,我怎么不使用检查 (IF..) 而不是得到错误消息而是 return输入错误时改为false?
PS:如果有任何改变,我正在使用 postgresql
引发异常时,return 函数中的错误:
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;
我想在请求期间检查是否遵守约束,如果不遵守则发送 ERROR 消息,只需 return FALSE。我该怎么做?
我正在使用的 TABLE 示例:
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 约束,但是如果我不检查我当然会得到错误消息,我怎么不使用检查 (IF..) 而不是得到错误消息而是 return输入错误时改为false?
PS:如果有任何改变,我正在使用 postgresql
引发异常时,return 函数中的错误:
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;