CREATE OR REPLACE FUNCTION _chkLogin(userid varchar, pwd varchar)
RETURNS BOOLEAN AS
$BODY$
DECLARE
passed BOOLEAN;
BEGIN
SELECT (_password = $2) FROM _vRegistration WHERE _userid = $1;
RETURN passed;
END;
$BODY$
LANGUAGE 'plpgsql';
当执行上面的代码时,我收到以下错误,
SELECT _chkLogin('username','abcd') as passed;
错误:查询没有目的地 结果数据
我用过表演然后我遇到了另一个问题,
PERFORM _chkLogin('username','abcd');
错误:语法错误在或附近 “执行”
建议我为了克服这个错误应该做些什么。
答案 0 :(得分:19)
你确实返回了,但你从不为它赋值。
并且函数中的select命令必须放置数据。
因此。将SQL更改为:
SELECT (_password = $2) INTO passed FROM _vRegistration WHERE _userid = $1;
此外 - 由于您使用变量名称(userid,pwd)使用它们:
SELECT (_password = pwd) INTO passed FROM _vRegistration WHERE _userid = userid;
答案 1 :(得分:3)
(见this other question for assign value to variable at declaration section)
语言PLpgSQL语法有很多方法可以说:
Y := f(X);
EXECUTE
子句仅用于"动态执行" (表现不佳),
EXECUTE 'f(X)' INTO Y;
使用Y := f(X);
或SELECT
执行静态声明,
SELECT f(X) INTO Y;
在放弃结果时使用PERFORM声明或使用void返回:
PERFORM f(X);