Oracle
 sql >> база данни >  >> RDS >> Oracle

нула за NUMBER_ARRAY не работи

Изглежда имате известно объркване относно нулеви масиви, празни масиви и масиви, които съдържат само един 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 масив в тези примери, но други числови типове също трябва да работят.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Помогнете ми да разбера разликата между CLOB и BLOB в Oracle

  2. Премахнете знак от дадена позиция в Oracle

  3. Как да използвате Oracle DB последователности, без да губите следващия пореден номер в случай на връщане назад

  4. Използване на LIKE в клауза IN на Oracle

  5. Провеждане на обща сума върху повтаряща се група по елементи въз основа на време в Oracle SQL