11

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

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 是按号而不是按行来索引的。

尽我所能,这意味着数据有效地存储在二维数组中,按列索引,然后按行索引。

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

l_a_variable := l_RowSet(1)(1);

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

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

4

1 回答 1

9

关联数组不一定是密集的。索引 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);
于 2012-07-27T03:59:08.910 回答