Oracle PL / SQL阵列是从0还是从1开始索引?

时间:2012-07-27 03:46:10

标签: oracle plsql oracle-apex

我面前有一段这样的代码:

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_arr2apex_plugin_util.get_data函数传回我的代码。 vc_arr2由编号索引,而不是按行索引。

最好我能说明这意味着数据有效地存储在2D数组中,按列然后按行索引。

使用LOOP语句时,是从零还是从一个索引?因为在我看来,我应该能够使LOOP变得多余,即:

l_a_variable := l_RowSet(1)(1);

但我需要提前知道是否将0或1作为初始行。

我无法在Oracle文档中找到一个明确的答案(不出所料,“索引”是一个相当广泛使用的术语),并且通过SO查看也不会向其他人显示同样的问题。

1 个答案:

答案 0 :(得分:8)

关联数组不一定是密集的。索引0处可能有一个元素,索引为-1时可能有一个元素,索引1处可能有一个元素。或者您可能在索引17,42和127处有元素。您发布的代码表示关联数组很密集,索引从1开始。

apex_plugin_util.get_data的特定情况下,集合应该是密集的,并且应该从1开始。如果循环实际上没有执行除您发布的内容之外的任何操作,则可以通过获取{{的最后一个元素来替换它。 1}},即

l_RowSet(1)