MS SQL -> Postgresql тип данных TABLE

Подскажите как сделать функцию

CREATE FUNCTION Listing()
RETURNS @TBL TABLE (
IDKart int
)
AS
BEGIN
declare @TT TABLE(IDKart int primary key)

insert into @TT (IDKart ) values( 1)
insert into @TT (IDKart ) values( 2)
insert into @TT (IDKart ) values( 3)

delete @TT where IDKart=2

insert into @TBL(IDKart) select IDKart from @TT
end

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

В PostgreSQL типа

В PostgreSQL типа данных TABLE нет. Поэтому попробуйте объяснить всё простыми словами.

Если разобрать

Если разобрать вышеприведенный пример, то вывод функции надо сделать, как SET OF - набор записей, а внутри функции использовать временную таблицу или курсор

у меня получилось так:

CREATE OR REPLACE FUNCTION "prod"."test_func" () RETURNS SETOF "prod"."int_test_type1" AS
$body$
BEGIN
CREATE TEMP TABLE "tt"( IDKart int) ON COMMIT DROP ;
 
INSERT INTO tt (IDKart ) VALUES( 1);
INSERT INTO tt (IDKart ) VALUES( 2);
INSERT INTO tt (IDKart ) VALUES( 3);
 
DELETE FROM tt WHERE IDKart=2;
 
RETURN QUERY  SELECT * FROM tt;
END;
$body$
LANGUAGE 'plpgsql'

Я еще сделал составной тип, для пущей похожести на таблицу (это если захочется несколько полей)
CREATE TYPE "prod"."int_test_type1" AS ( "IDKart" INTEGER);

временная таблица

а если функция запускается одновременно
как в этом случае живет таблица "tt"

подозреваю, что

подозреваю, что не очень хорошо живет :)
но можно сочинять какое-нибудь уникальное имя... а вообще, в зависимости от задачи, можно использовать например массивы или постоянную (или временную долгоживущую) таблицу с уникальным кодом транзакции
можно еще в начале функции поставить цикл с проверкой на существование этой таблицы и продолжать, когда она будет удалена...

я сейчас проверил - для каждой сессии при создании временного объекта создается отдельная схема, поэтому все вышесказанное относится к конфликтам внутри одной сессии, а для разных юзеров проблем быть не должно

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023