Как вернуть мультитаблицу в postgres без рефкурсора?

У меня есть один SQL-запрос, например, когда я возвращаю две таблицы. Как вернуть две таблицы в postgres?

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

Как это сделать в функции postgres? Структура этих двух таблиц не одинакова. Мне нужны два отдельных набора результатов в виде таблицы, например table [0] и table [1]. Мне нужно вернуть только эти два оператора select из функции.

Подробно опишите структуру обеих таблиц и структуру желаемого вывода. И удалите тег java, так как это чистый postgres.

404 24.04.2018 18:36

структура этих двух таблиц не одинакова. Мне нужно два отдельных набора результатов в виде таблицы, например table [0] и table [1]. пожалуйста, скажите мне, как это сделать --- создать процедуру sp_fetchResult как begin select * from TBl_Users; выберите * из TBl_Log; конец; в postgres

souvik sardar 24.04.2018 18:37

выберите FirstName, LastName из TBl_Users; выберите TaskId, CreatedBy из TBl_Log; Мне нужно вернуть только эти два оператора выбора из функции

souvik sardar 24.04.2018 18:42

ref курсоры в настоящее время ваш единственный вариант

a_horse_with_no_name 25.04.2018 09:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
683
1

Ответы 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/

В конце статьи вы можете увидеть, что они хотят реализовать «Возврат нескольких наборов результатов».

Другие вопросы по теме