PL / SQL: Bir dizideki öğeleri saymanın en iyi yolu?


14

Bu göz önüne alındığında:

DECLARE
  TYPE T_ARRAY IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
  MY_ARRAY T_ARRAY;
  V_COUNT INTEGER;

Yapmak istiyorum:

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;

Sayacı arttıran temel bir döngü yapan bir prosedür oluşturmaktan daha iyi bir şey var mı? Belki bir PL / SQL yerel işlevi zaten bunu yapıyor COUNT_ELEMENTS()?

Yanıtlar:



8

Neyse ki, ben korumak zorunda mevcut PL / SQL kodunda, çalışan bir "yerli" davranış bulundu:

V_COUNT := MY_ARRAY.COUNT;

hile yapmalı.

Bu "Google" bulmak çok zordur, çünkü "sayım" daha çok SELECT COUNT(...)SQL sorgularında bulunanlara atıfta bulunur ...


5
Ve işte dokümanlar için bir link :-)
Jack diyor ki topanswers.xyz

5

İç İçe-Tabloda (örn. Olmadan INDEX BY BINARY_INTEGER) CARDINALITY'i de kullanabilirsiniz.

V_COUNT := CARDINALITY(MY_ARRAY);

Önemli fark: NULL olan Nested-Table durumunda COUNTbir istisna oluşturur, CARDINALITYNULL döndürür.


CARDINALITY için +1. Her ne kadar kardinalite () varyasyonlar için çalışmıyorsa :(
Tagar

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' türü için 'dizi' den farklı bir değişken adı kullanırdım. Önce 'dizi' değişken yerine C (C, C # ve Java çok kullandığım) fark önce kodumu ile 20 dakika güreş geçirdim.
justdan23

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.