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ć
NULLtablica, 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
NULLtylko 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ć.