2012-07-27 68 views
8

我在我的前面這樣一段代碼: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_arr2apex_plugin_util.get_data函數傳遞迴我的代碼。 vc_arr2由編號索引,而不是按行索引。

盡我所能,這意味着數據被有效地存儲在一個二維數組中,按列索引,然後按行索引。

使用LOOP語句時,這是從零還是從一個索引?因爲在我看來,我應該能夠使該循環冗餘,即:

l_a_variable := l_RowSet(1)(1); 

但我需要提前知道是否給予0或1的初始行。

我無法在Oracle文檔中找到明確的答案(不出所料,「索引」是一個相當廣泛使用的術語),並且通過SO查看並沒有向任何其他人展示相同的問題。

回答

8

關聯數組不一定是密集的。在索引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); 
+0

謝謝。我更新了這個問題以更好地解釋get_data的作用。它*是一個2D集合,按列和行排列。由於PL/SQL數組可能很稀疏,我需要再挖掘一些來看看它是什麼讓我「活」。 – 2012-07-27 04:08:56

+1

@JacquesChester - 'apex_plugin_util.get_data'返回一個類型爲't_column_value_list'的集合,這是一個多維數組。更新了問題並從我的答案中刪除了1D/2D討論。 – 2012-07-27 04:28:37

相關問題