Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cài đặt trạng thái chuẩn bị trống cho NUMBER_ARRAY không hoạt động

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ụng

    ps.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ụng

    ps.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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận danh sách các hàm và chữ ký thủ tục từ oracle

  2. Ánh xạ một Ngày Oracle với một đối tượng Java bằng Hibernate

  3. Có thể tham chiếu đến chuỗi thay thế thứ 10 và các chuỗi tiếp theo trong regexp_replace của Oracle không?

  4. làm thế nào để in ra toàn bộ bảng bằng cách sử dụng khối ẩn danh trong pl sql?

  5. ORA-30926:không thể có được một tập hợp các hàng ổn định trong các bảng nguồn