これを考えると:
_DECLARE
TYPE T_ARRAY IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
MY_ARRAY T_ARRAY;
V_COUNT INTEGER;
_
私はしたいと思います:
_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;
_
カウンタをインクリメントする基本的なループを実行するプロシージャを作成するよりも良いものはありますか?多分PL/SQLのネイティブ関数はすでにこれを行っていますCOUNT_ELEMENTS()
?
私はこれがあなたが望んでいることだと思います:
V_COUNT := MY_ARRAY.COUNT;
幸い、私は維持しなければならない既存のPL/SQLコードで、「ネイティブ」の動作として機能することがわかりました。
_V_COUNT := MY_ARRAY.COUNT;
_
トリックを行う必要があります。
"count"はSQLクエリで見つかるSELECT COUNT(...)
をより頻繁に参照するため、これをGoogleで見つけるのは非常に困難です...
ネストしたテーブルの場合(つまり、INDEX BY BINARY_INTEGER
がない場合) [〜#〜] cardinality [〜#〜] も使用できます
V_COUNT := CARDINALITY(MY_ARRAY);
重要な違い:Nested-TableがNULLの場合、COUNT
は例外を発生させ、CARDINALITY
は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;
/