Parece que você tem alguma confusão sobre matrizes nulas, matrizes vazias e matrizes que contêm apenas um único
NULL
valor. Um
NULL
array é a ausência de um array, da mesma forma que um NULL
número é a ausência de um número. Um array vazio é um array que existe, mas contém 0 elementos. Ambos são diferentes de NUMBER_ARRAY(null)
, que é uma matriz que contém um único NULL
valor. O
COUNT
O método em uma matriz, que retorna o número de elementos na matriz, fornece uma ilustração das diferenças entre esses três. Em primeiro lugar, um
NULL
variedade: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
Aqui, temos um erro. Não conseguimos descobrir quantos elementos existem em
l_null_array
porque não temos uma matriz para encontrar o número de elementos. Em segundo lugar, uma matriz vazia:
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.
Aqui, podemos encontrar o número de elementos em uma matriz vazia, e esse número é zero.
Finalmente, um array contendo apenas
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 tem um elemento dentro dela, e esse elemento é
NULL
. Observe que você pode passar quantos argumentos quiser para o
NUMBER_ARRAY
função construtora, e esses valores serão o conteúdo inicial da matriz. Por exemplo, NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
cria uma matriz numérica com 6 elementos. Então, como podemos definir cada tipo de array usando JDBC?
-
Para definir umNULL
matriz, usar
ps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
como você fez acima.
-
Para uma matriz vazia, use:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Para um array contendo um únicoNULL
valor apenas, use
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Estou usando um
Integer
array nesses exemplos, mas outros tipos numéricos também devem funcionar.