错误:查询没有结果数据的目的地

时间:2010-01-18 10:52:18

标签: postgresql plpgsql

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');
  

错误:语法错误在或附近   “执行”

建议我为了克服这个错误应该做些什么。

2 个答案:

答案 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);