我需要显示Tree_Nodes表数据
CREATE OR REPLACE FUNCTION sample()
RETURNS TABLE() AS
$BODY$
BEGIN
select * from "Tree_Nodes";
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION sample()
OWNER TO postgres;
失败了:
ERROR: query has no destination for result data
避免错误,我会在所有数据中获得表格列格式
答案 0 :(得分:3)
要返回SELECT的结果,纯SQL函数更合适:
CREATE OR REPLACE FUNCTION sample()
RETURNS TABLE ( .... ) AS
$BODY$
select * from "Tree_Nodes";
$BODY$
LANGUAGE sql;
或者如果你真的需要PL / pgSQL,你需要使用return query
(手册中有明确记载)
CREATE OR REPLACE FUNCTION sample()
RETURNS TABLE (....)
AS
$BODY$
BEGIN
return query select * from "Tree_Nodes";
END;
$BODY$
LANGUAGE plpgsql;
但是你不能只指定returns table()
你必须定义结果的结构:
CREATE OR REPLACE FUNCTION sample()
RETURNS TABLE(id integer, some_column text, other_column decimal(10,2), ...)
AS
答案 1 :(得分:2)
引用的确切错误是由于在PL / PgSQL中使用SELECT
而没有INTO
子句引起的。您必须使用SELECT INTO somevariable
,使用RETURN QUERY
,如果要放弃数据,请使用PERFORM
语句代替SELECT
,as covered by the PL/PgSQL manual。
使用RETURN QUERY SELECT ....
修复后,您会发现该功能仍然不起作用,因为RETURNS TABLE()
没有意义。您将返回一个空结果集。它会失败,抱怨声明返回的结果集与函数不匹配。
无论如何这样做是没有意义的,因为你可以把它写成一个简单的SQL函数,如:
CREATE OR REPLACE FUNCTION sample()
RETURNS SETOF "Tree_Nodes"
AS $$
SELECT * FROM "Tree_Nodes";
$$ LANGUAGE sql;
此功能似乎没有用处。你想用它做什么?
(顺便说一句,你通常应该避免在生产代码中使用SELECT *
。列出列。这样,如果你以后添加一列,使用该表的东西不会突然停止工作。)