12
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 然后我遇到了不同的问题,

PERFORM _chkLogin('username','abcd');

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

建议我应该怎么做才能克服这个错误。

4

2 回答 2

21

您确实返回已通过,但您从未为其赋值。

并且函数内的选择命令必须有放置数据的地方。

所以。将您的 SQL 更改为:

SELECT  (_password = $2) INTO passed FROM _vRegistration WHERE _userid = $1;

另外 - 由于您使用变量名称(用户 ID、密码)使用它们

SELECT  (_password = pwd) INTO passed FROM _vRegistration WHERE _userid = userid;
于 2010-01-18T11:11:55.663 回答
4

关于赋值的注意事项

(请参阅this other question在声明部分为变量赋值

语言 PLpgSQL 语法有很多说法:

 Y := f(X);

EXECUTE子句仅用于“动态执行”(性能较低),

 EXECUTE 'f(X)' INTO Y;     

使用Y := f(X);orSELECT执行静态声明,

 SELECT f(X) INTO Y;

丢弃结果或使用 void 返回时使用PERFORM语句:

 PERFORM f(X);     
于 2014-04-14T11:54:53.713 回答