Parece que tiene cierta confusión acerca de las matrices nulas, las matrices vacías y las matrices que contienen solo un único NULL
valor.
Un NULL
matriz es la ausencia de una matriz, de la misma manera que un NULL
número es la ausencia de un número. Una matriz vacía es una matriz que existe, pero tiene 0 elementos. Ambos son diferentes de NUMBER_ARRAY(null)
, que es una matriz que contiene un solo NULL
valor.
El COUNT
en una matriz, que devuelve el número de elementos de la matriz, proporciona una ilustración de las diferencias entre estos tres.
En primer lugar, un NULL
matriz:
SQL> declare
2 l_null_array number_array := null;
3 begin
4 dbms_output.put_line('Count: ' || l_null_array.COUNT);
5 end;
6 /
declare
*
ERROR at line 1:
ORA-06531: Reference to uninitialized collection
ORA-06512: at line 4
Aquí, obtenemos un error. No podemos averiguar cuántos elementos hay en l_null_array
porque no tenemos una matriz para encontrar el número de elementos.
En segundo lugar, una matriz vacía:
SQL> declare
2 l_empty_array number_array := number_array();
3 begin
4 dbms_output.put_line('Count: ' || l_empty_array.COUNT);
5 end;
6 /
Count: 0
PL/SQL procedure successfully completed.
Aquí, podemos encontrar el número de elementos en una matriz vacía, y ese número es cero.
Finalmente, una matriz que contiene solo NULL
:
SQL> declare
2 l_array_containing_null number_array := number_array(null);
3 begin
4 dbms_output.put_line('Count: ' || l_array_containing_null.COUNT);
5 end;
6 /
Count: 1
PL/SQL procedure successfully completed.
Esta matriz tiene un elemento dentro, y ese elemento es NULL
.
Tenga en cuenta que puede pasar tantos argumentos como desee al NUMBER_ARRAY
función constructora, y estos valores serán los contenidos iniciales de la matriz. Por ejemplo, NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
crea una matriz de números con 6 elementos.
Entonces, ¿cómo podemos configurar cada tipo de arreglo usando JDBC?
-
Para establecer un
NULL
matriz, usops.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
como lo ha hecho anteriormente.
-
Para una matriz vacía, use:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Para una matriz que contiene un solo
NULL
solo valor, useps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Estoy usando un Integer
matriz en estos ejemplos, pero otros tipos numéricos también deberían funcionar.