В Postgres намного проще, чем в Oracle - вам не нужно определять тип коллекции. Просто объявите массив.
Разумная и наиболее эффективная замена TYPE array_text IS TABLE OF VARCHAR2 (50);
- это text[]
в Postgres.
Чтобы получить длину массива, используйте cardinality()
. Вам не нужен специальный метод для расширения его емкости, просто присвойте значение нужному индексу. Единственное существенное отличие состоит в том, что в Postgres нет (простого) способа сжатия массива.
declare
myValues text[];
num_values int;
begin
myValues[1] := 'VALUE1';
myValues[2] := 'VALUE2';
num_values := cardinality(myvalues); // yields 2
myValues[3] := 'VALUE3';
num_values := cardinality(myvalues); // yields 3
end;
Чтобы расширить ответ: вы также можете использовать такие типы таблиц. Таким образом, вам не нужно определять промежуточную «таблицу» типа коллекции, просто чтобы использовать тип таблицы для массива.
create table person
(
id integer,
firstname text,
lastname text
);
Тогда вы можете использовать
do
$$
declare
people_list person[];
begin
people_list[1] := row(42, 'Arthur', 'Dent')::person;
raise notice 'Name %', people_list[1].firstname;
end;
$$