Получение данных из составного типа - PullRequest
0 голосов
/ 07 мая 2020

Я в процессе обработки миграции БД с 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;

Есть ли лучший способ получить данные из типа или, может быть, другой метод, на который я еще не наткнулся?

1 Ответ

2 голосов
/ 07 мая 2020

Вы можете использовать:

v_pkAsset = in_data."pkAsset";
v_pkDevice = in_data."pkDevice";
...

Вы можете использовать его в процедуре. Например:

CREATE TYPE t_std_data AS
(
    "pkAsset" bigint,
    "pkDevice" bigint,
    "glType" text,
    "pkCustomer" bigint,
    "pkMessageIn" bigint,
    "assetType" text
);
CREATE TYPE

create procedure proc(param t_std_data)
language plpgsql
as $$
declare
v bigint;
begin
 v = param."pkAsset";
 raise notice 'v=%',v;
end;
$$;
CREATE PROCEDURE

do
$$
declare 
in_data t_std_data;
begin
 in_data."pkAsset" = 1;
 call proc(in_data);
end;
$$;
psql:t.sql:33: NOTICE:  v=1
DO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...