Массивы Oracle PL/SQL индексируются из 0 или из 1?

у меня перед глазами такой код:

FOR row IN 1..l_RowSet(1).count 
LOOP
   l_a_variable := l_RowSet(1)(row);
END LOOP;

l_RowSet является типом ApEx -- apex_plugin_util.t_column_value_list -- определили таким образом:

type t_column_value_list  is table of wwv_flow_global.vc_arr2 index by pls_integer;

здесь wwv_flow_global.vc_arr2 определяется как

type vc_arr2 is table of varchar2(32767) index by binary_integer;

на vc_arr2 передается обратно в мой код . Vc_arr2 индексируется колонки число, а не строку.

насколько я могу понять, это означает, что данные эффективно хранятся в 2D-массиве, индексируемом столбцом, а затем по строкам.

при использовании оператора LOOP это будет индексироваться с нуля или с единицы? Потому что мне кажется, что я должен быть в состоянии сделать этот цикл избыточным, т. е.:

l_a_variable := l_RowSet(1)(1);

но мне нужно знать заранее, давать ли 0 или 1 в качестве начальной строки.

Я не могу найти четкого ответа в документах Oracle (неудивительно, что "индекс" является довольно широко используемым термином), и просмотр так не показывает никого другого с тем же вопросом.

1 ответов


ассоциативный массив, не обязательно плотный. Может быть элемент с индексом 0, может быть элемент с индексом -1, может быть элемент с индексом 1. Или у вас могут быть элементы в индексах 17, 42 и 127. Код, который вы разместили, подразумевает, что ассоциативный массив плотный и что индексы начинаются с 1.

в конкретном случае apex_plugin_util.get_data коллекция должна быть плотной и должна начинаться с 1. Если цикл на самом деле не делает ничего, кроме того, что вы опубликовали, вы можете заменить его, выбрав последний элемент l_RowSet(1), то есть

l_a_variable := l_RowSet(1)(l_RowSet(1).count);