Il semble que vous ayez une certaine confusion à propos des tableaux nuls, des tableaux vides et des tableaux qui ne contiennent qu'un seul NULL
valeur.
Un NULL
array est l'absence de tableau, de la même manière qu'un NULL
le nombre est l'absence de nombre. Un tableau vide est un tableau qui existe, mais qui contient 0 éléments. Les deux sont différents de NUMBER_ARRAY(null)
, qui est un tableau contenant un seul NULL
valeur.
Le COUNT
méthode sur un tableau, qui renvoie le nombre d'éléments dans le tableau, fournit une illustration des différences entre ces trois.
Tout d'abord, un NULL
tableau :
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
Ici, nous obtenons une erreur. Nous ne pouvons pas savoir combien d'éléments il y a dans l_null_array
car nous n'avons pas de tableau pour trouver le nombre d'éléments de.
Deuxièmement, un tableau vide :
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.
Ici, nous pouvons trouver le nombre d'éléments dans un tableau vide, et ce nombre est zéro.
Enfin, un tableau contenant uniquement 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.
Ce tableau contient un élément, et cet élément est NULL
.
Notez que vous pouvez passer autant d'arguments que vous le souhaitez au NUMBER_ARRAY
fonction constructeur, et ces valeurs seront le contenu initial du tableau. Par exemple, NUMBER_ARRAY(1, 4, 18, 11, 22, 6)
crée un tableau de nombres avec 6 éléments.
Alors, comment pouvons-nous définir chaque type de tableau à l'aide de JDBC ?
-
Pour définir un
NULL
tableau, utilisezps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
comme vous l'avez fait ci-dessus.
-
Pour un tableau vide, utilisez :
ps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[0]));
-
Pour un tableau contenant un seul
NULL
valeur uniquement, utilisezps.setArray(i, new ARRAY(arrayDescriptor, conn, new Integer[] { null }));
J'utilise un Integer
tableau dans ces exemples, mais d'autres types numériques devraient également fonctionner.