منبع اصلی نوشتار زیر در این لینک قرار دارد

ساختار های تکراری در PL/SQL

توسط ساختارهای تکرای یا حلقه ها می توانیم یک یا چند عبارت یا دستور را به تعداد معینی تکرا کنیم. فرض کنید سطر های از جدولی را در یک رکورد ریخته اید و حال می خواهید که که تک تک سطر ها در خروجی چاپ شود. برای اینکار رکورد را در یک حلقه و تا زمانی که سطری وجود داشته باشد خوانده و در خروجی چاپ می کنیم. در PL/SQL سه نوع حلقه  LOOP ساده، WHILE و FOR وجود دارد. LOOP ساده ترین شکل استفاده از حلقه است.

حلقه LOOP

ساده ترین شکل حلقه ها که یک یا مجموعه ای از دستور ها را تا زمانی که حلقه به پایان برسد اجرا می کند. می بایست یک شرط خروجی می بایست برای خروج از حلقه تعیین شود، در غیر این صورت حلقه در وضعیت تکرار بی نهایت می افتد. شکل زیر فرمت کلی حلقه LOOP و همچنین یک مثال بسیار ساده را نشان می دهد. در مثال توسط EXIT WHEN بررسی می شود که ایا شرط جلوی آن TRUE است، اگر TRUE بود از حلقه خارج می شویم. توجه کنید که مثال (sample) زیر بسیار ساده است.

oracleloop1

برای استفاده از LOOP باید پیش از آن شریط زیر را آماده کنید.

  • مقداردهی اولیه متغیری پیش از LOOP به عنوان شمارنده LOOP. به طور مثال در sample بالا باید در بخش DECLARE از بلاک PL/SQL و پیش از LOOP متغیر v_count را ایجاد کنیم.
  • افزایش متغیر شمارنده در داخل LOOP
  • استفاده از EXIT WHEN CONDITION که در آن CONDITION شرط خروج از حلقه را تعیین می کند. در مثال بالا شرط خروجی وقتی که مقدار متغیر برابر 11 بشود. در صورتی که فقط از EXIT و بدون WHEN و شرط جلوی آن استفاده کنید، حلقه فقط یک بار اجرا می شود.

شکل زیر مثالی پیچیده تر را نشان می دهد. در آن سطر های یک جدول در یک مکان نما ریخته شده و سپس یک رکورد با فیلد هایی همسان و هم نوع با ستون های جدول ایجاد می شود. داده های مکان نما توسط حلقه LOOP سطر به سطر به فیلد های رکورد ریخته شده و نمایش داده می شود. سپس تا زمانی که سطری برای خوانده شدن از مکان نما دیگر وجود نداشته باشد این کار ادامه پیدا می کند. شرط خروجی از حلقه LOOP به صورت زیر است که از صفت NOTFOUND% استفاده شده است.

;EXIT WHEN emp_cur%NOTFOUND

oracleloop2

حلقه FOR

این حلقه نیز یک دستور یا مجموعه ای از دستور ها را به تعداد معینی اجرا می کند و شرط خروج از حلقه نیز باید مشخص باشد. فرمت کلی آن به صورت زیر است، که در آن counter یک شمارنده و lower_number و higher_number گام های اجرا هستند و تا زمانی حلقه اجرا می شود که به higher_number برسیم. نوشتن LOOP ئ END LOOP اجباری است.

oracleloop3

یک مثال کاربردی و مفید در شکل زیر آمده است که در آن سطر های درون یک مکان نما توسط خط زیر به فیلد های رکورد ریخته می شوند. یعنی تا زمانی که سطری از جدول در مکان نما وجود داشته باشد، در هر گام FOR به فیلد های رکورد به نام emp_rec ریخته شده و سپس توسط دستور DBMS_OUTPUT.PUT_LINE در خروجی چاپ می شود. شرط پایان حلقه تمام شدن سطر های درون مکان نما است.

oracleloop4

اعداد lower و higher محدوده حلقه را نشان می دهد. به طور مثال 10..1 یعنی از عدد 1 تا 10 به عنوان محدوده حلقه است. به طور مثال بلاک زیر را در نظر بگیرید :

oracleloop5

که در آن محدوده از عدد یک تا مقدار متغیر n_time است. در هر گام مقدار محدوده به داخل متغیر n_i ریخته شده و سپس در خروجی چاپ می شود. این کار تا زمانی ادامه پیدا می کند که به انتهای محدوده برسیم. خروجی اجرای بلاک بالا در شکل زیر آمده است.

oracleloop6

با استفاده از کلمه کلیدی REVERS می توانید تکرار را به صورت وارونه و معکوس انجام دهید. مثال بلاک زیر گونه ای از این نوع حلقه به همراه خروجیش نشان می دهد.

oracleloop7

حلقه WHILE

در حلقه WHILE مادامی که شرط حلقه TRUE باشد، اجرای دستور(های) درون حلقه ادامه پیدا می کند. شرط در ابتدای هر گام یا تکرار ارزیابی می شود، و زمانی که شرط حلقه FALSE شود، اجرای حلقه خاتمه می یابد و کنترل برنامه به خط بعدی داده می شود.

oracleloop8

قطعه بلاک زیر نمونه ساده ای از عملکرد حلقه WHILE را نشان می دهد که وقتی متغیر n_count کوچکتر از صفر شود، اجرای حلقه پایان می یابد.

oracleloop9



برچسب ها : ,