为什么有一个疑问“否”;“结果数据的目的地”;在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