تغییرات FOR LOOP  در Oracle PLsql نسخه 21C

در نسخه 21c بهبود های خوبی در حوزه کنترل FOR LOOP اتفاق افتاده که در ادامه آنها را مرور خواهیم کرد.در نسخه های گذشته دستور بسیار ساده و پایه بوده که در ادامه دو نمونه از آن ارائه می گردد.set serveroutput onbeginfor i in 1 .. 5 loopdbms_output.put_line(i);end loop;end;/12345PL/SQL procedure successfully completed.SQL>با دستور reverse حلقه به صورت معکوس عمل می کندbeginfor i in reverse 1 .. 5 loopdbms_output.put_line(i);end loop;end;/54321PL/SQL procedure successfully completed.SQL>نسخه 21Cچند حلفه تکرار:در این نسخه می توان چند حلقه تکرار را در یک دستور اجرا کرد.beginfor i in 1 .. 3, reverse 7 .. 9, 20 .. 22 loopdbms_output.put_line(i);end loop;end;/123987202122PL/SQL procedure successfully completed.SQLگام های پرش در حلقه :در نسخه های قبلی گام های پرش به صورت پیش فرض 1 بود که در نسخه 21C می توان این گام ها را تعریف کرد ( نزولی و صعودی ).beginfor i in 1 .. 5 by 2, reverse 1 .. 5 by 2 loopdbms_output.put_line(i);end loop;end;/135531PL/SQL procedure successfully completed.SQL>گام های تکرار اعشاری :به صورت پیش فرض اگر برای گام ها عدد اعشار در نظر گرفته شود آنها round خواهند شد.beginfor i in 1.2 .. 2.2 loopdbms_output.put_line(i);end loop;end;/12PL/SQL procedure successfully completed.SQL>در نسخه 21C این امکان وجود دارد که اعداد اعشار در حلقه ها تعریف کرد اما گام ها به صورت پیش فرض 1 هستند.beginfor i number(5,1) in 1.2 .. 2.2 loopdbms_output.put_line(i);end loop;end;/1.22.2PL/SQL procedure successfully completed.SQL>می توان گام ها را نیز بر مبنای اعشار تعریف کرد .beginfor i number(5,1) in 1.2 .. 2.2 by 0.2 loopdbms_output.put_line(i);end loop;end;/1.21.41.61.822.2PL/SQL procedure successfully completed.SQL>حلقه با یک تکرار:در نسخه جدید می توان حلقه با یک تکرار تعریف کرد.beginfor i in 2 loopdbms_output.put_line(i);end loop;end;/2PL/SQL procedure successfully completed.SQL>جذابیت قابلیت بالا با اضافه کردن کلمه repeat تکمیل می شود . به مثال زیر توجه کنید :beginfor i in 1, repeat i*5 while i < 1000 loopdbms_output.put_line(i);end loop;end;/1525125625PL/SQL procedure successfully completed.SQL>حلقه بر روی Collectionکلمات کلیدی Values of, Indices of و Pairs of در حلقه ها برای Collection ها، قابلیت های خوبی رو ایجاد می کنند..Values of برای نمایش مقادیر collectiondeclaretype tab_t is table of pls_integer index by pls_integer;l_tab tab_t;beginl_tab(1) := 20;l_tab(10) := 30;l_tab(100) := 40;for i in values of l_tab loopdbms_output.put_line(i);end loop;end;/203040PL/SQL procedure successfully completed.SQL>declaretype tab_t is table of pls_integer index by pls_integer;l_tab tab_t := tab_t(1 => 20, 10 => 30, 100 => 40);beginfor i in values of l_tab loopdbms_output.put_line(i);end loop;end;/203040PL/SQL procedure successfully completed.SQL>درنسخه های قبلی برای انجام کاری مانند دستورات فوق باید کدی مانند زیر می نوشتیمdeclaretype tab_t is table of pls_integer index by pls_integer;l_tab tab_t := tab_t(1 => 20, 10 => 30, 100 => 40);l_idx pls_integer;beginl_idx := l_tab.first;while l_idx is not null loopdbms_output.put_line(l_tab(l_idx));l_idx := l_tab.next(l_idx);end loop;end;/203040PL/SQL procedure successfully completed.SQL>Indices of برای نمایش شاخص هاdeclaretype tab_t is table of pls_integer index by pls_integer;l_tab tab_t := tab_t(1 => 20, 10 => 30, 100 => 40);beginfor i in indices of l_tab loopdbms_output.put_line(i);end loop;end;/110100PL/SQL procedure successfully completed.SQL>به مثال زیر نیز دقت کنیدdeclaretype tab_t is table of varchar2(32767) index by pls_integer;l_main_tab tab_t := tab_t(1 => 'ONE', 2 => 'TWO', 3 => 'THREE', 4 => 'FOUR', 5 => 'FIVE');l_idx_tab tab_t := tab_t(1 => null, 3 => null, 5 => null);beginfor i in indices of l_idx_tab loopdbms_output.put_line(l_main_tab(i));end loop;end;/ONETHREEFIVEPL/SQL procedure successfully completed.SQL>دستور Pairs of :با این دستور می توان هم مقدار و هم شاخص را داشت. به مثال زیر دقت کنید.declaretype tab_t is table of varchar2(32767) index by pls_integer;l_tab tab_t := tab_t(1 => 'ONE', 2 => 'TWO', 3 => 'THREE', 4 => 'FOUR', 5 => 'FIVE');beginfor i,v in pairs of l_tab loopdbms_output.put_line('index=' || i || ' value=' || v);end loop;end;/index=1 value=ONEindex=2 value=TWOindex=3 value=THREEindex=4 value=FOURindex=5 value=FIVEPL/SQL procedure successfully completed.SQL>پرش و توقف در حلقه ها :با دستور WHEN می توان پرش را در حلقه در کنترل داشت.beginfor i in 1 .. 10 when mod(i,3)=0 loopdbms_output.put_line(i);end loop;end;/369PL/SQL procedure successfully completed.SQL>برای در اختیار داشتن کنترل توقف در حلقه می توان از دستور WHILE استفاده کرد.beginfor i in 1 .. 10 while i <= 5 loopdbms_output.put_line(i);end loop;end;/12345PL/SQL procedure successfully completed.SQL>برای مطالعه مقالات بیشتر در حوزه اوراکل به سایت آرتاراد مراجعه کنید