11

目の前に次のようなコードがあります。

FOR row IN 1..l_RowSet(1).count 
LOOP
   l_a_variable := l_RowSet(1)(row);
END LOOP;

l_RowSetApExタイプです----次の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ステートメントを使用する場合、これはゼロからインデックス付けされますか、それとも1からインデックス付けされますか?その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 に答える