带有 SQL 查询的函数没有结果数据的目的地

新手上路,请多包涵

我正在尝试创建一个返回 SELECTed 结果集的函数。当我像这样调用我的 postgres 函数时 select * from tst_dates_func() 我收到如下所示的错误:

 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 "tst_dates_func" line 3 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 "tst_dates_func" line 3 at SQL statement

这是我创建的函数:

 CREATE OR REPLACE FUNCTION tst_dates_func()
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$
BEGIN
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;
END;
$BODY$
      LANGUAGE plpgsql;

我不确定为什么会收到上述错误。我想运行 select * from tst_dates_func(); 并取回数据。如果需要,或者进一步加入结果集。这里有什么问题?

原文由 Horse Voice 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

像普通 SQL 一样做

CREATE OR REPLACE FUNCTION tst_dates_func()
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;

$BODY$
      LANGUAGE sql;

如果你真的需要 plpgsql 使用 return query

 CREATE OR REPLACE FUNCTION tst_dates_func()
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$
BEGIN
    perform SELECT dblink_connect('remote_db');
    return query
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;

END;
$BODY$
      LANGUAGE plpgsql;

原文由 Clodoaldo Neto 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进