-1

我需要显示 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

避免错误,我将在所有数据中获得表格列格式

4

2 回答 2

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
于 2013-07-11T06:11:02.260 回答
2

您引用的确切错误是由在 PL/PgSQL 中使用SELECT无子句引起的。如 PL/PgSQL 手册所述INTO您必须使用SELECT INTO somevariable、使用RETURN QUERY,如果要丢弃数据,请使用PERFORM语句而不是。SELECT

一旦你通过使用修复它,RETURN QUERY SELECT ....你会发现该功能仍然不起作用,因为RETURNS TABLE()没有意义。您正在返回一个空的结果集。它会失败,抱怨语句返回的结果集与函数不匹配。

无论如何,这样做是没有意义的,因为您可以将其编写为一个简单的 SQL 函数,例如:

CREATE OR REPLACE FUNCTION sample()
      RETURNS SETOF "Tree_Nodes"
AS $$
    SELECT * FROM "Tree_Nodes";
$$ LANGUAGE sql;

此功能似乎没有任何作用。你想用它来达到什么目的?

(顺便说一句,您通常应该避免SELECT *在生产代码中。列出列。这样,如果您稍后添加列,使用该表的东西不会突然停止工作。)

于 2013-07-11T06:00:21.803 回答