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
NULLarray, 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
NULLkun 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.