MySQL-এ WHILE LOOP এবং IF STATEMENT একসাথে ব্যবহার করার উদাহরণ নিচে দেওয়া হলো। আমরা এটিকে একটি স্ট্রোড প্রসিডিউরে ব্যবহার করছি।
আমাদের স্ট্রোড প্রসিডিউর তৈরির কোয়েরি নিচে দেওয়া হলো:
mysql> DELIMITER // mysql> create procedure sp_getDaysDemo() -> BEGIN -> SELECT MONTH(CURDATE()) INTO @current_month; -> SELECT MONTHNAME(CURDATE()) INTO @current_monthname; -> SELECT DAY(LAST_DAY(CURDATE())) INTO @total_numberofdays; -> SELECT CAST(DATE_FORMAT(NOW() ,'%Y-%m-01') as DATE)INTO @check_weekday; -> SELECT DAY(@check_weekday) INTO @check_day; -> SET @count_days = 0; -> SET @workdays = 0; -> -> WHILE(@count_days < @total_numberofdays) DO -> IF (WEEKDAY(@check_weekday) < 5) THEN -> SET @workdays = @workdays+1; -> END IF; -> SET @count_days = @count_days+1; -> SELECT ADDDATE(@check_weekday, INTERVAL 1 DAY) INTO @check_weekday; -> END WHILE; -> -> select @current_month,@current_monthname,@total_numberofdays,@check_weekday,@check_day; -> END -> // Query OK, 0 rows affected (0.24 sec) mysql> delimiter ;
CALL কমান্ড দিয়ে স্ট্রোড প্রসিডিউর কল করা যাক। সিনট্যাক্স নিচে দেওয়া হলো:
CALL yourStoredProcedureName();
এখন স্ট্রোড প্রসিডিউর কল করার কোয়েরি:
mysql> call sp_getDaysDemo();
আউটপুট নিচে দেওয়া হলো:
+----------------+--------------------+---------------------+----------------+------------+ | @current_month | @current_monthname | @total_numberofdays | @check_weekday | @check_day | +----------------+--------------------+---------------------+----------------+------------+ | 1 | January | 31 | 2019-02-01 | 1 | +----------------+--------------------+---------------------+----------------+------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.02 sec)
ব্যাখ্যা: এই স্ট্রোড প্রসিডিউরটি বর্তমান মাসের মোট দিন সংখ্যা (@total_numberofdays), মাসের নাম, এবং মাসের প্রথম দিন থেকে শুরু করে প্রতিটি দিন চেক করে বুধবার থেকে শুক্রবার (WEEKDAY < 5 মানে সোমবার-শুক্রবার) পর্যন্ত কতগুলো কর্মদিবস (@workdays) আছে তা গণনা করে। WHILE লুপ দিন সংখ্যা পর্যন্ত চলে, IF দিয়ে ওয়িকডে চেক করে, এবং ADDDATE দিয়ে তারিখ বাড়ায়। MySQL-এ প্রসিডিউরাল লজিক (লুপ, কন্ডিশন) লিখতে BEGIN ... END ব্লক এবং DELIMITER পরিবর্তন করা প্রয়োজন।