Подскажите как сделать функцию
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 TYPE "prod"."int_test_type1" AS ( "IDKart" INTEGER);
временная таблица
а если функция запускается одновременно
как в этом случае живет таблица "tt"
подозреваю, что
подозреваю, что не очень хорошо живет
но можно сочинять какое-нибудь уникальное имя... а вообще, в зависимости от задачи, можно использовать например массивы или постоянную (или временную долгоживущую) таблицу с уникальным кодом транзакции
можно еще в начале функции поставить цикл с проверкой на существование этой таблицы и продолжать, когда она будет удалена...
я сейчас проверил - для каждой сессии при создании временного объекта создается отдельная схема, поэтому все вышесказанное относится к конфликтам внутри одной сессии, а для разных юзеров проблем быть не должно