Портирование процедуры T-SQL, возвращающей несколько результатов, в PostgreSql

Есть проект, в котором используются MSSQL сервер и клиент на C#. Появилась необходимость добавить в проект поддержку PostgreSQL. В клиенте не используется Entity Framework. Связь с MSSQL сервером осуществляется через класс SqlConnection. Я добавил связь с PostgreSQL через OdbcConnection и запросы к таблицам и функциям, возвращающим простой результат, работают. Я споткнулся на портировании в plpgsql процедуры такого вида:

CREATE PROCEDURE [dbo].[Foo]
    some parameters
AS
BEGIN
    declare @AccountId int
    
    -- get account
    select  @AccountId = ...

    ...
        
    -- fetch account
    select @AccountId

    ...
    
    -- additional information
    select distinct
            t1.a,
            t1.b,
            ...
            t2.c,
            t2.d,
            ...
    from    table1 t1, 
            table2 t2,
            ...
    where   ...
END

Процедура возвращает два результата разного типа - int и таблицу. Клиент читает их так:

int accountId;
using( IDataReader reader = conn.ExecuteReader( query ) )
{
    reader.Read();
    accountId = reader.GetInt32( 0 );
    reader.NextResult();

    fwi.AdditionalInformation = new AdditionalInformationCollection( accountId );
    fwi.AdditionalInformation.RetrieveByQuery( reader, conn );
}

В plpgsql нужно задать то, что будет возвращать функция при её определении. На сколько я понял, если задать RETURNS SETOF RECORD, то типы результата нужно указать в клиенте при обращении к этой функции select * from foo(...) as (???). Если функцию задать как RETURNS TABLE, то здесь же и нужно указать типы возвращаемых значений. Можно ли такое реализовать на plpgsql не изменяя T-SQL и клиентскую часть? Или придётся разбивать процедуру на две и в MSSQL и в PostgreSQL? У меня ещё мало опыта в работе с PostgreSQL.


Ответы (0 шт):