পিএল / এসকিউএল: একটি অ্যারেতে উপাদান গণনা করার সেরা উপায়?


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;

কৌতুক করা উচিত।

এটি গুগলের সাথে খুঁজে পাওয়া খুব কঠিন, যেহেতু "গণনা" আরও ঘন ঘন SELECT COUNT(...)এসকিউএল কোয়েরিতে পাওয়া যায় ...


5
এবং এখানে ডক্সের লিঙ্কটি রয়েছে :-)
জ্যাক বলেছেন টপান্সওয়ার্স.অক্সিজ

5

নেস্টেড-টেবিলের ক্ষেত্রে (অর্থাত্ ছাড়া INDEX BY BINARY_INTEGER) আপনিও যত্নবান ব্যবহার করতে পারেন

V_COUNT := CARDINALITY(MY_ARRAY);

গুরুত্বপূর্ণ পার্থক্য: নেস্টেড-টেবিলের ক্ষেত্রে যা নুল হয়, COUNTএকটি ব্যতিক্রম উত্থাপন করে, CARDINALITYNULL প্রদান করে।


CARDINALITY এর জন্য +1। Cardinality () varrays জন্য :( কাজ করে না যদিও
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;
/

আমি 'অ্যারে_t' টাইপের জন্য 'অ্যারে' এর চেয়ে আলাদা ভেরিয়েবলের নাম ব্যবহার করব। আমি আমার কোডটি নিয়ে 20 মিনিট কুস্তি কাটিয়েছি বুঝতে পারার আগে 'অ্যারে' টাইপের পরিবর্তে পরিবর্তনশীল ছিল (যেহেতু আমি সি, সি # এবং জাভা ব্যবহার করি)।
justdan23

-5

একটি প্রাথমিক পদ্ধতি হ'ল:

for i in my_array.first .. my_array.last 
loop 
   v_count:=v_count+1;
end loop;

-1 এটি কোনও এসোসিয়েটিভ অ্যারের জন্য কাজ করবে না - কেন তা এখানে দেখুন
জ্যাক বলছেন টপান্সওয়ার্স.অক্সিজ

-1 এই slooow হয়
Tagar
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.