Hasura-Query没有结果数据的目标 [英] Hasura - query has no destination for result data
本文介绍了Hasura-Query没有结果数据的目标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Hasura中,我正在尝试编写一个基于plpgsql的函数,该函数应该返回t_Documents。该函数应该根据它应该运行适当的SQL(使用IF条件检查)的参数值接受各种可选参数,并返回记录。这是我的目标。
我已经从没有参数的简单函数开始,该函数在Hasura中成功创建和跟踪,但当尝试查询它时抛出"query has no destination for result data"
我们非常感谢为实现这一目标而提供的任何帮助
CREATE OR REPLACE FUNCTION dms.fngetdocs()
RETURNS SETOF dms.t_documents
LANGUAGE plpgsql
STABLE
AS $function$
BEGIN
SELECT *
FROM dms.t_documents;
END;
$function$
推荐答案
每条SQL语句返回行(如SELECT
,但也有INSERT
WITHRETURNING
等)。)结果数据必须有一个目标。这就是错误消息告诉您的。要么赋值变量,要么返回给调用方。若要放弃结果,请使用PERFORM
而不是SELECT
。请参阅:
- SELECT raises exception in PL/pgSQL function
- PL/pgSQL: PERFORM vs CALL
- SELECT or PERFORM in a PL/pgSQL function
但您显然希望返回行。您的PL/pgSQL函数的工作方式如下:
CREATE OR REPLACE FUNCTION dms.fngetdocs()
RETURNS SETOF dms.t_documents
LANGUAGE plpgsql STABLE PARALLEL SAFE AS
$func$
BEGIN
RETURN QUERY
SELECT * FROM dms.t_documents;
END
$func$
请参阅:
当然,没有什么意义。您只需直接使用SELECT * FROM dms.t_documents;
,而不是调用该函数。
或使用更简单的SQL函数,其中会自动返回SELECT
的结果:
CREATE OR REPLACE FUNCTION dms.fngetdocs()
RETURNS SETOF dms.t_documents
LANGUAGE sql STABLE PARALLEL SAFE AS
$func$
SELECT * FROM dms.t_documents;
$func$;
See the manual about the added PARALLEL SAFE
.
这篇关于Hasura-Query没有结果数据的目标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文