Det verkar som om du har en viss förvirring angående null-arrayer, tomma arrayer och arrayer som bara innehåller en enda NULL
värde.
En NULL
array är frånvaron av en array, på samma sätt som en NULL
nummer är frånvaron av ett nummer. En tom array är en array som finns, men som har 0 element i sig. Båda skiljer sig från NUMBER_ARRAY(null)
, som är en array som innehåller en enda NULL
värde.
COUNT
metod på en array, som returnerar antalet element i arrayen, ger en illustration av skillnaderna mellan dessa tre.
Först en NULL
array:
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
Här får vi ett fel. Vi kan inte ta reda på hur många element det finns i l_null_array
eftersom vi inte har en array att hitta antalet element i.
För det andra, en tom array:
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.
Här kan vi hitta antalet element i en tom array, och det numret är noll.
Slutligen en array som endast innehåller 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.
Denna array har ett element inom sig, och det ena elementet är NULL
.
Observera att du kan skicka så många argument som du vill till NUMBER_ARRAY
konstruktorfunktion, och dessa värden kommer att vara det initiala innehållet i arrayen. Till exempel, NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
skapar en nummermatris med 6 element i den.
Så, hur kan vi ställa in varje typ av array med JDBC?
-
För att ställa in en
NULL
array, användps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
som du har gjort ovan.
-
För en tom array, använd:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
För en array som innehåller en enda
NULL
endast värde, användps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Jag använder ett Integer
array i dessa exempel, men andra numeriska typer bör också fungera.