PL / SQL:计算数组中元素的最佳方法?


14

鉴于这种:

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

Answers:


26

我认为这是您追求的目标:

V_COUNT := MY_ARRAY.COUNT;

8

幸运的是,我在必须维护的现有PL / SQL代码中发现了一种有效的“本机”行为:

V_COUNT := MY_ARRAY.COUNT;

应该可以。

在Google上很难找到这一行,因为“计数”更频繁地指代SELECT COUNT(...)SQL查询中可以找到的...。




2
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;
/

对于类型'array_t',我将使用与'array'不同的变量名。在意识到“数组”是变量而不是类型之前,我花了20分钟时间对代码进行角力(因为我大量使用C,C#和Java)。
justdan23

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.