Het lijkt erop dat u enige verwarring heeft over null-arrays, lege arrays en arrays die slechts een enkele NULL
bevatten waarde.
Een NULL
array is de afwezigheid van een array, op dezelfde manier als een NULL
getal is de afwezigheid van een getal. Een lege array is een array die bestaat, maar 0 elementen bevat. Beide zijn verschillend van NUMBER_ARRAY(null)
, wat een array is die een enkele NULL
. bevat waarde.
De COUNT
methode op een array, die het aantal elementen in de array retourneert, geeft een illustratie van de verschillen tussen deze drie.
Ten eerste een NULL
reeks:
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
Hier krijgen we een foutmelding. We kunnen niet achterhalen hoeveel elementen er zijn in l_null_array
omdat we geen array hebben om het aantal elementen van te vinden.
Ten tweede, een lege 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.
Hier kunnen we het aantal elementen in een lege array vinden, en dat aantal is nul.
Eindelijk een array die alleen NULL
. bevat :
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.
Deze array bevat één element en dat ene element is NULL
.
Merk op dat u zoveel argumenten kunt doorgeven als u wilt aan de NUMBER_ARRAY
constructorfunctie, en deze waarden zullen de initiële inhoud van de array zijn. Bijvoorbeeld NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
maakt een getallenreeks met 6 elementen erin.
Dus, hoe kunnen we elk type array instellen met JDBC?
-
Een
NULL
instellen array, gebruikps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
zoals je hierboven hebt gedaan.
-
Gebruik voor een lege array:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Voor een array met een enkele
NULL
alleen waarde, gebruikps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Ik gebruik een Integer
array in deze voorbeelden, maar andere numerieke typen zouden ook moeten werken.