我有一个plpgsql函数,如下所示:
CREATE OR REPLACE FUNCTION func1(....)
RETURNS TABLE(aa integer, bb integer, cc timestamp)
AS $BODY$
BEGIN
CREATE TEMPRORAY TABLE tmp
AS SELECT .....;
WITH RECURSIVE x AS (
SELECT *
FROM tmp
WHERE some stuff ...)
SELECT *
FROM tbl1
WHERE ....;
END;
$BODY$
LANGUAGE plpgsql;
当我将其称为select func1(1, 2, 3)
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
然而,将return query
插入身体并不会有任何帮助:
return query
WITH RECURSIVE x AS ( ....)
并且错误保持不变。
答案 0 :(得分:0)
RETURN QUERY
应该解决问题,以便您的问题可能在其他地方。
一个主要观点是在函数中创建临时表有一些非常不幸的含义(由于临时表被锁定,很容易遇到锁定耗尽问题)。您可以更好地 MUCH 在查询中移动内联。
其次,这可能是一个与你想象的不同的SELECT
陈述。 PL / PGSQL有时会引发错误,指向函数的结尾,因此您需要查看整个函数以查找错误。因此,如果您需要,请对代码进行模糊处理,但目前我们可以做的最好的事情是“您的错误可能在其他地方。请仔细检查。”
答案 1 :(得分:0)
显示此示例,它可以正常工作
CREATE OR REPLACE FUNCTION test()
RETURNS TABLE(_id integer, _name text) AS
$BODY$
BEGIN
return QUERY
with x as (select id,name from my_table)
select id,name from x;
END;$BODY$
LANGUAGE plpgsql STABLE