Zdá se, že máte nějaké nejasnosti ohledně nulových polí, prázdných polí a polí, která obsahují pouze jeden NULL
hodnotu.
A NULL
pole je nepřítomnost pole, stejným způsobem jako NULL
číslo je absence čísla. Prázdné pole je pole, které existuje, ale obsahuje 0 prvků. Oba se liší od NUMBER_ARRAY(null)
, což je pole, které obsahuje jeden NULL
hodnotu.
COUNT
metoda na poli, která vrací počet prvků v poli, poskytuje ilustraci rozdílů mezi těmito třemi.
Za prvé, NULL
pole:
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
Zde se zobrazí chyba. Nemůžeme zjistit, kolik prvků je v l_null_array
protože nemáme pole, ve kterém bychom našli počet prvků.
Za druhé, prázdné pole:
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.
Zde můžeme najít počet prvků v prázdném poli a toto číslo je nula.
Nakonec pole obsahující pouze 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.
Toto pole má v sobě jeden prvek a ten jeden prvek je NULL
.
Všimněte si, že do NUMBER_ARRAY
můžete předat tolik argumentů, kolik chcete funkce konstruktoru a tyto hodnoty budou počátečním obsahem pole. Například NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
vytvoří pole čísel se 6 prvky.
Jak tedy můžeme nastavit každý druh pole pomocí JDBC?
-
Chcete-li nastavit
NULL
pole, použijteps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
jak jste to udělali výše.
-
Pro prázdné pole použijte:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Pro pole obsahující jeden
NULL
pouze hodnotu, použijteps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Používám Integer
pole v těchto příkladech, ale měly by fungovat i jiné číselné typy.