sql >> Database teknologi >  >> RDS >> Oracle

readyStatement-indstillingen null for NUMBER_ARRAY virker ikke

Det lader til, at du har en vis forvirring omkring nul-arrays, tomme arrays og arrays, der kun indeholder en enkelt NULL værdi.

En NULL matrix er fraværet af en matrix, på samme måde som en NULL tal er fraværet af et tal. En tom matrix er en matrix, der eksisterer, men har 0 elementer i sig. Begge er forskellige fra NUMBER_ARRAY(null) , som er et array, der indeholder en enkelt NULL værdi.

COUNT metode på et array, som returnerer antallet af elementer i arrayet, giver en illustration af forskellene mellem disse tre.

For det første en NULL array:

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

Her får vi en fejl. Vi kan ikke finde ud af, hvor mange elementer der er i l_null_array fordi vi ikke har en matrix at finde antallet af elementer af.

For det andet et tomt 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.

Her kan vi finde antallet af elementer i et tomt array, og det tal er nul.

Endelig en matrix, der kun indeholder 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.

Denne matrix har et element i sig, og det ene element er NULL .

Bemærk, at du kan sende så mange argumenter, som du vil, til NUMBER_ARRAY konstruktørfunktion, og disse værdier vil være det oprindelige indhold af arrayet. For eksempel NUMBER_ARRAY(1, 4, 18, 11, 22, 6) opretter en talarray med 6 elementer i.

Så hvordan kan vi indstille hver type array ved hjælp af JDBC?

  • For at indstille en NULL array, brug

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

    som du har gjort ovenfor.

  • For et tomt array skal du bruge:

    ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
    
  • For et array, der indeholder en enkelt NULL kun værdi, brug

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

Jeg bruger et Integer array i disse eksempler, men andre numeriske typer burde også fungere.




  1. MySQL-syntaks kontrollerer om parameteren er null

  2. Sådan afinstalleres Mysql Shell på MacOS

  3. Sådan gemmer du sqlite-database direkte på sdcard

  4. Sammenføjninger baseret på betingelser i flere tabeller