بهبودهای حلقه تکرار FOR در اوراکل 21c

با فرمت حلقه FOR آشنا هستید:

FOR loop_counter IN [REVERSE] lowest_number..highest_number
LOOP
   {...statements...}
END LOOP;

مطابق این syntax، قرار است شمارنده(loop_counter) به صورت ترتیبی(با گام یک) از نقطه lowest_number به نقطه highest_number برسد. برای مثال، با اجرای قطعه کد زیر، اعداد 4 تا 8 نمایش داده می شوند:

SQL> set serveroutput on
begin
  for i in 4 .. 8 loop
    dbms_output.put_line(i);
  end loop;
end;
/
4
5
6
7
8
PL/SQL procedure successfully completed.


اگر قرار باشد در خروجی فوق، اعداد 50 تا 55 هم نمایش داده شوند، چه تغییری باید در کد ایجاد کنیم؟ با توجه به syntax حلقهFOR(قبل از اوراکل 21c)، به ناچار باید از دو حلقه FOR استفاده کنیم:

begin
  for i in 4 .. 8 loop
    dbms_output.put_line(i);
  end loop;
  for i in 50 .. 55 loop
    dbms_output.put_line(i);
  end loop;  
end;
/
4
5
6
7
8
50
51
52
53
54
55
PL/SQL procedure successfully completed.

اوراکل 21c با بهبودی که در کنترل حلقه FOR ایجاد کرده، حل این قبیل مسائل را ساده تر کرده است. برای مثال، کد زیر، عملکرد مشابهی با قطعه کد فوق دارد:

begin
     for i in 4..8,50..55 loop
       dbms_output.put_line(i);
     end loop;
   end;
 /

در ادامه با ارائه چند مثال دیگر، بیشتر با بهبودهایی اوراکل 21c در این زمینه آشنا خواهیم شد.

مثال(WHEN clause): در تکه کد زیر، با استفاده از قابلیت جدید اوراکل 21c، مضربهای عدد 4 تا قبل از عدد 30  نمایش داده می شوند:

BEGIN
  FOR i IN 1 .. 30 WHEN MOD(i,4) = 0 LOOP
    dbms_output.put_line(i);
  END LOOP;
END;
/
4
8
12
16
20
24
28

مثال(WHILE clause): عددی از کاربر گرفته می شود و تا زمانی که مقدار شمارنده از نصف عدد گرفته شده از کاربر، کوچک تر باشد، حلقه ادامه پیدا می کند:

declare
n number:=10;
BEGIN
  FOR i IN 1 .. n WHILE i<n/2 LOOP
    dbms_output.put_line(i);
  END LOOP;
END;
/
1
2
3
4

مثال(تعیین گام پرش): نمایش یک در میان اعداد 1 تا 10:

begin
  for i in 1 .. 10 by 2 loop
    dbms_output.put_line(i);
  end loop;
end;
/
1
3
5
7
9

مثال: مقدار شمارنده می تواند به صورت اعشاری انتخاب شود:

BEGIN
  FOR i number(10,5) IN 3.5..4.4 by 0.4 LOOP
    dbms_output.put_line(i);
  END LOOP;
END;
/
3.5
3.9
4.3

مثال(REPEAT clause): در اوراکل 21c می توان صرفا نقطه ابتدایی را برای شمارنده تعیین کرد:

BEGIN
  FOR i IN 5 LOOP
    dbms_output.put_line(i);
  END LOOP;
END;
/
5

این کار شاید کاربرد چندانی نداشته باشد اما با استفاده از REPEAT clause می توان از این قابلیت هم استفاده کاربردی داشت. برای مثال، تکه کد زیر، توانهای عدد 4 را تا عدد 1500 نمایش می دهد:

begin
  for i in 4, repeat i*4 while i < 1500 loop
    dbms_output.put_line(i);
  end loop;
end;
/
4
16
64
256
1024

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.