我面前有一段这样的代码:
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
从apex_plugin_util.get_data
函数传回我的代码。 vc_arr2由列编号索引,而不是按行索引。
最好我能说明这意味着数据有效地存储在2D数组中,按列然后按行索引。
使用LOOP语句时,是从零还是从一个索引?因为在我看来,我应该能够使LOOP变得多余,即:
l_a_variable := l_RowSet(1)(1);
但我需要提前知道是否将0或1作为初始行。
我无法在Oracle文档中找到一个明确的答案(不出所料,“索引”是一个相当广泛使用的术语),并且通过SO查看也不会向其他人显示同样的问题。
答案 0 :(得分:8)
关联数组不一定是密集的。索引0处可能有一个元素,索引为-1时可能有一个元素,索引1处可能有一个元素。或者您可能在索引17,42和127处有元素。您发布的代码表示关联数组很密集,索引从1开始。
在apex_plugin_util.get_data
的特定情况下,集合应该是密集的,并且应该从1开始。如果循环实际上没有执行除您发布的内容之外的任何操作,则可以通过获取{{的最后一个元素来替换它。 1}},即
l_RowSet(1)