is table of
обычно делается с использованием массивов в Postgres.
Эквивалентом INDEX BY VARCHAR2(30)
является, вероятно, значение JSONB (пара ключ / значение) или значение hstore .В обоих случаях вы теряете безопасность типов, которую может предложить is table of number index by varchar
.
Мне очень неясно, чего вы пытаетесь достичь (особенно как вы хотите использовать table of number
, но, возможно, следующееВы начнете:
create type gr_data as
(
col1 numeric, col2 varchar(30)
);
create or replace function test()
returns void as $body$
declare
NomTable text:= 'tab1';
tes text := 'some value';
result gr_data[];
gt_cpt jsonb := '{}';
begin
-- this assigns 'some value' to the key 'tab1' in the jsonb key/value pair
-- similar to GT_CPT(NomTable) := tes;
gt_cpt := jsonb_set(gt_cpt, array[nomtable], tes);
-- this assigns an empty array to the variable result
-- if I remember correctly that's the same as Oracle's type constructor GT_DATA()
result := array[];
end
$body$
language plpgsql;