it-swarm.asia

PL / SQL: أفضل طريقة لحساب العناصر في المصفوفة؟

ونظرا لهذا:

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()؟

14
Frosty Z

أعتقد أن هذا ما تبحث عنه:

V_COUNT := MY_ARRAY.COUNT;
26
Philᵀᴹ

لحسن الحظ ، وجدت في كود PL/SQL الحالي الذي يجب أن أحافظ عليه ، سلوك "أصلي" عامل:

V_COUNT := MY_ARRAY.COUNT;

يجب أن تفعل الخدعة.

من الصعب جدًا العثور على هذا مع Google ، حيث يشير "count" بشكل متكرر إلى SELECT COUNT(...) التي يمكن العثور عليها في استعلامات SQL ...

8
Frosty Z

في حالة وجود جدول متداخل (أي بدون INDEX BY BINARY_INTEGER) يمكنك أيضًا استخدام أصالة

V_COUNT := CARDINALITY(MY_ARRAY);

فرق مهم: في حالة Nested-Table وهو NULL ، COUNT يثير استثناء ، CARDINALITY يُرجع NULL.

5
Wernfried Domscheit
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;
/
2
mugunthinimkceit