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
NULLtableau, 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
NULLvaleur 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.