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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2085421/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-10 22:24:33  来源:igfitidea点击:

ERROR: query has no destination for result data

postgresqlplpgsql

提问by Chaitanya

CREATE OR REPLACE FUNCTION _chkLogin(userid varchar, pwd varchar)
RETURNS BOOLEAN AS
$BODY$
DECLARE 
 passed BOOLEAN;
BEGIN
 SELECT  (_password = ) FROM _vRegistration WHERE _userid = ;
 RETURN passed;
END;
$BODY$
LANGUAGE 'plpgsql';

When am executing the code above am getting the following error,

当我执行上面的代码时出现以下错误,

SELECT _chkLogin('username','abcd') as passed;

ERROR: query has no destination for result data

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

I've used perform then i get a different problem,

我已经使用了 perform 然后我遇到了一个不同的问题,

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

ERROR: syntax error at or near "perform"

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

Suggest me what should I be doing in order to overcome this error.

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

回答by

You do return passed but you neverassign value to it.

你确实返回通过了,但你从来没有给它赋值。

And select command within the function has to have place to put data to.

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

So. Change your SQL to:

所以。将您的 SQL 更改为:

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

Also - since you're using names for variables (userid, pwd) use them:

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

SELECT  (_password = pwd) INTO passed FROM _vRegistration WHERE _userid = userid;

回答by Peter Krauss

Notes about assign value

赋值注意事项

(see this other question for assign value to variable at declaration section)

(请参阅此其他问题以在声明部分为变量赋值

The language PLpgSQL syntax have many ways to say:

语言 PLpgSQL 语法有多种说法:

 Y := f(X);

The EXECUTEclause is only for "dynamic execution" (less performance),

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

 EXECUTE 'f(X)' INTO Y;     

Use Y := f(X);or SELECTfor execute static declarations,

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

 SELECT f(X) INTO Y;

Use PERFORMstatment when discard the results or to work with void returns:

丢弃结果或处理无效返回时使用PERFORM语句:

 PERFORM f(X);