Изглежда имате известно объркване относно нулеви масиви, празни масиви и масиви, които съдържат само един NULL
стойност.
NULL
масив е липсата на масив, по същия начин, както NULL
числото е липсата на число. Празен масив е масив, който съществува, но има 0 елемента в него. И двете са различни от NUMBER_ARRAY(null)
, което е масив, който съдържа един NULL
стойност.
COUNT
метод на масив, който връща броя на елементите в масива, предоставя илюстрация на разликите между тези три.
Първо, NULL
масив:
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
Тук получаваме грешка. Не можем да разберем колко елемента има в l_null_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.
Тук можем да намерим броя на елементите в празен масив и това число е нула.
И накрая, масив, съдържащ само 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.
Този масив има един елемент в себе си и този един елемент е NULL
.
Имайте предвид, че можете да подадете колкото искате аргументи към NUMBER_ARRAY
функция конструктор и тези стойности ще бъдат първоначалното съдържание на масива. Например NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
създава числов масив с 6 елемента в него.
И така, как можем да зададем всеки вид масив с помощта на JDBC?
-
За да зададете
NULL
масив, използвайтеps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
както направихте по-горе.
-
За празен масив използвайте:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
За масив, съдържащ единичен
NULL
само стойност, използвайтеps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Използвам Integer
масив в тези примери, но други числови типове също трябва да работят.