为什么有一个疑问“否”;“结果数据的目的地”;在PostgreSQL存储过程中?

为什么有一个疑问“否”;“结果数据的目的地”;在PostgreSQL存储过程中?,sql,function,authentication,stored-procedures,Sql,Function,Authentication,Stored Procedures,我是博士后新生,我有个问题。 我想介绍一下程序: CREATE OR REPLACE FUNCTION autenticarusuario() RETURNS users AS $BODY$` DECLARE login text; senha text; BEGIN SELECT * FROM users WHERE login_user = login AND pass_user = senha; END; $BODY$ LANGUAGE plpgsql IM

我是博士后新生,我有个问题。 我想介绍一下程序:

CREATE OR REPLACE FUNCTION autenticarusuario()
RETURNS users AS
$BODY$`
DECLARE
 login text;
 senha text;
BEGIN
SELECT * FROM users WHERE login_user = login
            AND pass_user = senha;
END;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 100;
ALTER FUNCTION autenticarusuario()
  OWNER TO postgres;
但我总是得到这样的信息:

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function autenticarusuario() line 6 at SQL statement
********** Error **********

ERROR: query has no destination for result data
SQL state: 42601
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Context: PL/pgSQL function autenticarusuario() line 6 at SQL statement

这里的问题是你告诉Postgres“开始执行这个函数,然后执行这个查询”。Postgres抱怨是因为您没有告诉它如何处理查询结果。您可以使用
selectinto
语句,也可以使用
returnquery
返回单个列,如用户id:

CREATE OR REPLACE FUNCTION autenticarusuario()
RETURNS SETOF INTEGER AS
$BODY$`
DECLARE
 login text;
 senha text;
BEGIN
  RETURN QUERY SELECT id 
                 FROM users 
                WHERE login_user = login
                  AND pass_user = senha;
END;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 100;

如果您想为每条记录返回多个字段,您可以使用与详细信息类似的策略创建自己的类型。

这里的问题是您告诉Postgres“开始执行此函数,然后执行此查询”。Postgres抱怨是因为您没有告诉它如何处理查询结果。您可以使用
selectinto
语句,也可以使用
returnquery
返回单个列,如用户id:

CREATE OR REPLACE FUNCTION autenticarusuario()
RETURNS SETOF INTEGER AS
$BODY$`
DECLARE
 login text;
 senha text;
BEGIN
  RETURN QUERY SELECT id 
                 FROM users 
                WHERE login_user = login
                  AND pass_user = senha;
END;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 100;

如果要为每条记录返回多个字段,可以使用与详细信息类似的策略创建自己的类型。

我的同事也遇到了类似的问题。她在select查询之前使用了打开MYCURS,在select查询之后使用了返回MYCURS

我的同事也遇到了类似的问题。她在选择查询之前使用了打开MYCURS,在选择查询之后使用了返回MYCURS