Compte tenu de ceci:
DECLARE
TYPE T_ARRAY IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
MY_ARRAY T_ARRAY;
V_COUNT INTEGER;
Je voudrais faire:
BEGIN
-- ... some code filling the MY_ARRAY array
-- obviously COUNT_ELEMENTS() does not exists, this is what I'm looking for :-)
V_COUNT := COUNT_ELEMENTS(MY_ARRAY);
DBMS_OUTPUT.PUT_LINE('My array containts ' || V_COUNT || ' elements.');
END;
Y a-t-il quelque chose de mieux que de créer une procédure faisant une boucle de base incrémentant un compteur? Peut-être qu'une fonction native PL/SQL fait déjà cela COUNT_ELEMENTS()
?
Je pense que c'est ce que vous recherchez:
V_COUNT := MY_ARRAY.COUNT;
Heureusement, j'ai trouvé dans le code PL/SQL existant que je dois maintenir, un comportement "natif" fonctionnel:
V_COUNT := MY_ARRAY.COUNT;
devrait faire l'affaire.
Celui-ci est très difficile à trouver avec Google, car "count" fait plus souvent référence à la SELECT COUNT(...)
qui peut être trouvée dans les requêtes SQL ...
Dans le cas d'une table imbriquée (c'est-à-dire sans INDEX BY BINARY_INTEGER
) vous pouvez également utiliser CARDINALITÉ
V_COUNT := CARDINALITY(MY_ARRAY);
Différence importante: dans le cas de Nested-Table qui est NULL, COUNT
lève une exception, CARDINALITY
renvoie NULL.
declare
type array_t is varray(10) of number(10);
array array_t := array_t(1,2,3,4,5,6,7,8,9,10);
c number(10):=0;
b number(10):=0;
begin<<outer>>
for i in 1..array.count loop
if( mod(i,2)=0)
then
c:=c+i;
end if;
end loop;
dbms_output.put_line(c);
begin
for i in 1..array.count loop
if( mod(i,2)<>0)
then
b:=b+i;
end if;
end loop;
dbms_output.put_line(b);
end;
end outer;
/