Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

setelan prepareStatement null untuk NUMBER_ARRAY tidak berfungsi

Tampaknya Anda memiliki beberapa kebingungan tentang array nol, array kosong, dan array yang hanya berisi satu NULL nilai.

Sebuah NULL array adalah tidak adanya array, dengan cara yang sama seperti NULL bilangan adalah tidak adanya bilangan. Array kosong adalah array yang ada, tetapi memiliki 0 elemen di dalamnya. Keduanya berbeda dari NUMBER_ARRAY(null) , yang merupakan larik yang berisi satu NULL nilai.

COUNT metode pada larik, yang mengembalikan jumlah elemen dalam larik, memberikan ilustrasi perbedaan di antara ketiganya.

Pertama, sebuah NULL susunan:

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

Di sini, kita mendapatkan kesalahan. Kami tidak dapat mengetahui berapa banyak elemen yang ada di l_null_array karena kita tidak memiliki larik untuk menemukan jumlah elemen.

Kedua, array kosong:

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.

Di sini, kita dapat menemukan jumlah elemen dalam array kosong, dan angka itu adalah nol.

Akhirnya, array yang hanya berisi 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.

Array ini memiliki satu elemen di dalamnya, dan elemen tersebut adalah NULL .

Perhatikan bahwa Anda dapat meneruskan argumen sebanyak yang Anda suka ke NUMBER_ARRAY fungsi konstruktor, dan nilai-nilai ini akan menjadi konten awal array. Misalnya, NUMBER_ARRAY(1, 4, 18, 11, 22, 6) membuat larik angka dengan 6 elemen di dalamnya.

Jadi, bagaimana kita bisa mengatur setiap jenis array menggunakan JDBC?

  • Untuk menyetel NULL larik, gunakan

    ps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
    

    seperti yang telah Anda lakukan di atas.

  • Untuk array kosong, gunakan:

    ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
    
  • Untuk larik yang berisi satu NULL nilai saja, gunakan

    ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
    

Saya menggunakan Integer array dalam contoh ini, tetapi tipe numerik lainnya juga dapat digunakan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL:tulis ulang pernyataan SELECT menggunakan parameter IN dalam prosedur tersimpan

  2. Bagaimana mendefinisikan Prosedur Paket Oracle di H2 untuk Pengujian

  3. ORA-00907 Masalah tanda kurung kanan tidak ada - pilih dengan urutan dengan kueri penyisipan di dalam

  4. ojdbc14.jar vs. ojdbc6.jar

  5. Oracle:bagaimana cara mendapatkan persen dari total dengan kueri?