Wygląda na to, że masz pewne zamieszanie dotyczące tablic pustych, tablic pustych i tablic zawierających tylko jeden NULL
wartość.
NULL
tablica to brak tablicy, w taki sam sposób jak NULL
liczba to brak liczby. Pusta tablica to tablica, która istnieje, ale zawiera 0 elementów. Oba różnią się od NUMBER_ARRAY(null)
, która jest tablicą zawierającą pojedynczy NULL
wartość.
COUNT
Metoda na tablicy, która zwraca liczbę elementów w tablicy, stanowi ilustrację różnic między tymi trzema.
Po pierwsze, NULL
tablica:
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
Tutaj pojawia się błąd. Nie możemy dowiedzieć się, ile elementów jest w l_null_array
ponieważ nie mamy tablicy do znalezienia liczby elementów.
Po drugie, pusta tablica:
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.
Tutaj możemy znaleźć liczbę elementów w pustej tablicy, a ta liczba wynosi zero.
Wreszcie tablica zawierająca tylko 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.
Ta tablica zawiera jeden element, a ten jeden element to NULL
.
Pamiętaj, że możesz przekazać dowolną liczbę argumentów do NUMBER_ARRAY
konstruktora, a te wartości będą początkową zawartością tablicy. Na przykład NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
tworzy tablicę liczb z 6 elementami.
Jak więc ustawić każdy rodzaj tablicy za pomocą JDBC?
-
Aby ustawić
NULL
tablica, użyjps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
tak jak zrobiłeś powyżej.
-
Dla pustej tablicy użyj:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Dla tablicy zawierającej pojedynczy
NULL
tylko wartość, użyjps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Używam Integer
tablicy w tych przykładach, ale inne typy liczbowe również powinny działać.