Массивы 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);