2012-07-27 11 views
8

tengo frente a mí un pedazo de código como este:¿Las matrices Oracle PL/SQL están indexadas desde 0 o desde 1?

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

l_RowSet es un tipo ApEx - apex_plugin_util.t_column_value_list - se define así:

type t_column_value_list is table of wwv_flow_global.vc_arr2 index by pls_integer; 

donde wwv_flow_global.vc_arr2 se define como

type vc_arr2 is table of varchar2(32767) index by binary_integer; 

El vc_arr2 se devuelve a mi código desde la función apex_plugin_util.get_data. El vc_arr2 está indexado por columna número, no por fila.

Lo mejor que puedo entender es que los datos se almacenan efectivamente en una matriz 2D, indexada por columna y luego por fila.

Al utilizar la instrucción LOOP, ¿se indexaría desde cero o desde uno? Porque me parece que debería ser capaz de hacer que Lazo redundante, es decir:

l_a_variable := l_RowSet(1)(1); 

Pero que había necesidad de saber de antemano si va a dar 0 o 1 como la fila inicial.

No puedo encontrar una respuesta clara en los documentos de Oracle (como era de esperar, "índice" es un término bastante utilizado) y un vistazo a SO no muestra a nadie más con la misma pregunta.

Respuesta

8

Una matriz asociativa no es necesariamente densa. Puede haber un elemento en el índice 0, puede haber un elemento en el índice -1, puede haber un elemento en el índice 1. O puede tener elementos en los índices 17, 42 y 127. El código que publicó implica que el elemento asociativo array es denso y los índices comienzan en 1.

En el caso específico de apex_plugin_util.get_data, la colección debe ser densa y debe comenzar en 1. Si el bucle no está haciendo otra cosa que lo publicado, puede reemplazarlo buscando el último elemento de l_RowSet(1), es decir,

l_a_variable := l_RowSet(1)(l_RowSet(1).count); 
+0

Gracias. He actualizado la pregunta para explicar mejor qué hace get_data. It * is * a 2D collection, por column then row. Dado que las matrices PL/SQL pueden ser dispersas, tendré que cavar un poco más para ver lo que me está devolviendo "en vivo". –

+1

@JacquesChester - 'apex_plugin_util.get_data' devuelve una colección de tipo' t_column_value_list' que es una matriz multidimensional. Actualicé la pregunta y eliminé la discusión 1D/2D de mi respuesta. –

Cuestiones relacionadas