Có vẻ như bạn đã nhầm lẫn về mảng null, mảng trống và mảng chỉ chứa một NULL
duy nhất giá trị.
A NULL
mảng là sự vắng mặt của một mảng, giống như cách mà một NULL
số là sự vắng mặt của một số. Mảng trống là một mảng tồn tại, nhưng có 0 phần tử trong đó. Cả hai đều khác với NUMBER_ARRAY(null)
, là một mảng chứa một NULL
giá trị.
COUNT
trên một mảng, trả về số phần tử trong mảng, cung cấp minh họa về sự khác biệt giữa ba phương thức này.
Thứ nhất, NULL
mảng:
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
Ở đây, chúng tôi nhận được một lỗi. Chúng tôi không thể tìm ra có bao nhiêu phần tử trong l_null_array
bởi vì chúng tôi không có một mảng để tìm số phần tử của.
Thứ hai, một mảng trống:
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.
Tại đây, chúng ta có thể tìm thấy số phần tử trong một mảng trống và số đó bằng không.
Cuối cùng, một mảng chỉ chứa 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.
Mảng này có một phần tử bên trong nó và một phần tử đó là NULL
.
Lưu ý rằng bạn có thể chuyển bao nhiêu đối số tùy thích vào NUMBER_ARRAY
hàm khởi tạo và các giá trị này sẽ là nội dung ban đầu của mảng. Ví dụ:NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
tạo một mảng số có 6 phần tử trong đó.
Vì vậy, làm cách nào chúng ta có thể đặt từng loại mảng bằng cách sử dụng JDBC?
-
Để đặt một
NULL
mảng, sử dụngps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
như bạn đã làm ở trên.
-
Đối với một mảng trống, hãy sử dụng:
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Đối với một mảng chứa một
NULL
chỉ giá trị, sử dụngps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
Tôi đang sử dụng Integer
mảng trong các ví dụ này, nhưng các kiểu số khác cũng sẽ hoạt động.