【问题标题】:How to return multi table in postgres without refcursor?如何在没有 refcursor 的情况下在 postgres 中返回多表?
【发布时间】:2018-04-24 16:27:20
【问题描述】:

我有一个 SQL 查询,比如我要返回两个表。如何在 postgres 中返回两个表?

 create proc sp_fetchResult
    as
    begin
    select * from TBl_Users;
    select * from TBl_Log;
    end;    

如何在 postgres 函数中做到这一点?这两个表的结构不一样。我需要表格形式的两个单独的结果集,例如表格 [0] 和表格 [1]。我只需要从函数中返回这两个选择语句。

【问题讨论】:

  • 详细说明两个表的结构,以及所需输出的结构。并删除 java 标签,因为这是纯 postgres。
  • 这两个表的结构不一样。我需要表格形式的两个单独的结果集,例如表格 [0] 和表格 [1]。请告诉我该怎么做---create proc sp_fetchResult as begin select * from TBl_Users;从 TBl_Log 中选择 *;结尾;在 postgres 中
  • 从 TBl_Users 中选择 FirstName、LastName;从 TBl_Log 中选择 TaskId,CreatedBy;我只需要从函数中返回这两个选择语句
  • 引用游标是目前你唯一的选择

标签: java sql postgresql return


【解决方案1】:

不幸的是,当前的 PostgreSQL 10 不允许这样做。从存储的函数中,您只能返回具有定义结构的类型 TABLE 或具有用户定义类型的 SETOF。

但是你不能返回简单的结果集或没有声明结构的更多结果集(你可以在 MySQL 或 MS SQL 中)。目前唯一的可能性是 - 正如你所提到的 - refcursor。见这里:http://www.sqlines.com/postgresql/how-to/return_result_set_from_stored_procedure

但是即将推出实现存储过程的 PostgreSQL 11 - 请参见此处:https://blog.2ndquadrant.com/postgresql-11-server-side-procedures-part-1/

在文章的最后你可以看到他们想要实现“返回多个结果集”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多