函数没有得到值问题postgresql 9.4
本文关键字:问题 postgresql 函数 | 更新日期: 2023-09-27 18:15:40
我有一个users表,想根据email查看一个用户是否存在。但是当我调用将根据电子邮件返回用户名的函数时,函数引发异常说没有找到用户名,而raise notice和exception都能够显示用户名。然后当我不放这部分的时候;
IF NOT FOUND THEN
RAISE NOTICE '%', v_username;
RAISE EXCEPTION '% not found', v_username;
END IF;
然后它说;
control reached end of function without RETURN
然后当我从visual studio调用这个函数时它会给出一个异常;
ERROR [42601] ERROR: syntax error at or near '"get_username'";'nError while executing the query
有什么问题吗?
CREATE OR REPLACE FUNCTION webuser.get_username(email varchar(30)) RETURNS varchar as $$
DECLARE
v_username varchar(30);
v_state varchar(1000);
v_msg varchar(1000);
v_detail varchar(1000);
v_hint varchar(1000);
v_context varchar(1000);
BEGIN
v_username := (SELECT username FROM webuser.users u WHERE u.email = quote_ident($1));
IF NOT FOUND THEN
RAISE NOTICE '%', quote_ident($1);
RAISE EXCEPTION '% not found', v_username;
END IF;
EXCEPTION WHEN others THEN
GET STACKED DIAGNOSTICS
v_state = RETURNED_SQLSTATE,
v_msg = MESSAGE_TEXT,
v_detail = PG_EXCEPTION_DETAIL,
v_hint = PG_EXCEPTION_HINT,
v_context = PG_EXCEPTION_CONTEXT;
INSERT INTO webuser.error_table (v_state, v_msg, v_detail, v_hint, v_context) VALUES ( v_state, v_msg, v_detail, v_hint, v_context);
RETURN v_username;
END;
$$ language PLPGSQL volatile--stable is not accepted because of error logging to error table?!
SECURITY DEFINER
SET search_path = webuser, pg_temp;
正确的系统应该是
<BODY>
RETURN v_username; -- no error return
EXCEPTION WHEN others THEN
<BODY>
RETURN <something>; -- error return