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;

क्या एक काउंटर बनाने के लिए एक बुनियादी लूप की प्रक्रिया करने से बेहतर कुछ है? शायद एक पीएल / एसक्यूएल देशी फ़ंक्शन पहले से ही ऐसा करता है COUNT_ELEMENTS()?

जवाबों:


26

मुझे लगता है कि यह वही है जो आप के बाद हैं:

V_COUNT := MY_ARRAY.COUNT;

8

सौभाग्य से, मुझे मौजूदा पीएल / एसक्यूएल कोड मिला है जिसे मुझे बनाए रखना है, एक कार्यशील "मूल" व्यवहार:

V_COUNT := MY_ARRAY.COUNT;

चाल चलनी चाहिए।

यह Google के साथ खोजना बहुत कठिन है, क्योंकि "गणना" अधिक बार संदर्भित होती है, SELECT COUNT(...)जो SQL प्रश्नों में पाया जा सकता है ...


5
और यहाँ डॉक्स के लिए एक लिंक है :-)
जैक का कहना है कि topanswers.xyz कोशिश करें

5

नेस्टेड-टेबल (यानी बिना INDEX BY BINARY_INTEGER) के मामले में आप कार्डिनैलिटी का भी उपयोग कर सकते हैं

V_COUNT := CARDINALITY(MY_ARRAY);

महत्वपूर्ण अंतर: नेस्टेड-टेबल के मामले में जो NULL है, COUNTएक अपवाद उठाता है, CARDINALITYNULL देता है।


CARDINALITY के लिए +1। हालाँकि कार्डिनैलिटी () वेरिएज़ के लिए काम नहीं करती है :(
तगर

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' प्रकार के लिए 'सरणी' की तुलना में एक भिन्न चर नाम का उपयोग करूंगा। मैंने अपने कोड के साथ कुश्ती में 20 मिनट बिताए, इससे पहले कि मुझे पता चला कि 'सरणी' टाइप के बजाय वेरिएबल था (चूंकि मैं सी, सी #, और जावा अलॉट का उपयोग करता हूं)।
justdan23

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.