Vzhledem k tomu:
DECLARE
TYPE T_ARRAY IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
MY_ARRAY T_ARRAY;
V_COUNT INTEGER;
Rád bych dělal:
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;
Existuje něco lepšího než vytvoření postupu provádějícího základní smyčku zvyšující čítač? Možná nativní funkce PL/SQL již tuto COUNT_ELEMENTS()
?
Myslím, že to je to, co jste po:
V_COUNT := MY_ARRAY.COUNT;
Naštěstí jsem ve stávajícím PL/SQL kódu, který musím udržovat, našel fungující „nativní“ chování:
V_COUNT := MY_ARRAY.COUNT;
by měl udělat trik.
Toto je s Googlem velmi obtížné najít, protože „count“ se častěji odkazuje na SELECT COUNT(...)
, které lze nalézt v SQL dotazech ...
V případě vnořené tabulky (tj. Bez INDEX BY BINARY_INTEGER
) můžete také použít KARDINÁLNOST
V_COUNT := CARDINALITY(MY_ARRAY);
Důležitý rozdíl: V případě vnořené tabulky, která je NULL, COUNT
vyvolá výjimku, CARDINALITY
vrátí 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;
/