Я в процессе обработки миграции БД с Oracle на PostgreSQL. Сохраненные функции Oracle позволяют использовать вложенные функции c, которые совместно используют глобальные данные из включающей процедуры. Кажется, что PostgreSQL не позволяет этого, но в долгосрочной перспективе может помочь в меньших процессах.
Чтобы передать глобальные данные в подпроцесс, я подумал, что заключу его в составной тип.
CREATE TYPE sp_stickymsgin.t_std_data AS
(
"pkAsset" bigint,
"pkDevice" bigint,
"glType" text,
"pkCustomer" bigint,
"pkMessageIn" bigint,
"assetType" text
);
Я могу поместить данные в тип и передать их во вложенную процедуру :
v_data := row(v_pkAsset,v_pkDevice,v_glType,v_pkCustomer,v_pkMessageIn,v_assetType)::sp_stickymsgin.t_std_data;
Но я не могу найти простого способа вернуть его обратно и прибег к следующему, что кажется немного громоздким.
select (in_data).* into v_pkAsset,v_pkDevice,v_glType,v_pkCustomer,v_pkMessageIn,v_assetType;
Есть ли лучший способ получить данные из типа или, может быть, другой метод, на который я еще не наткнулся?