Det lader til, at du har en vis forvirring omkring nul-arrays, tomme arrays og arrays, der kun indeholder en enkelt NULL
værdi.
En NULL
matrix er fraværet af en matrix, på samme måde som en NULL
tal er fraværet af et tal. En tom matrix er en matrix, der eksisterer, men har 0 elementer i sig. Begge er forskellige fra NUMBER_ARRAY(null)
, som er et array, der indeholder en enkelt NULL
værdi.
COUNT
metode på et array, som returnerer antallet af elementer i arrayet, giver en illustration af forskellene mellem disse tre.
For det første 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
Her får vi en fejl. Vi kan ikke finde ud af, hvor mange elementer der er i l_null_array
fordi vi ikke har en matrix at finde antallet af elementer af.
For det andet et tomt 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.
Her kan vi finde antallet af elementer i et tomt array, og det tal er nul.
Endelig en matrix, der kun indeholder 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.
Denne matrix har et element i sig, og det ene element er NULL
.
Bemærk, at du kan sende så mange argumenter, som du vil, til NUMBER_ARRAY
konstruktørfunktion, og disse værdier vil være det oprindelige indhold af arrayet. For eksempel NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
opretter en talarray med 6 elementer i.
Så hvordan kan vi indstille hver type array ved hjælp af JDBC?
-
For at indstille en
NULL
array, brugps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
som du har gjort ovenfor.
-
For et tomt array skal du bruge:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
For et array, der indeholder en enkelt
NULL
kun værdi, brugps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Jeg bruger et Integer
array i disse eksempler, men andre numeriske typer burde også fungere.