ในขณะที่วนลูปเข้า Oracle PL/SQL พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
Oracle ลูป WHILE ใน PL/SQL จะทำซ้ำบล็อกโค้ดตราบใดที่เงื่อนไขยังคงเป็นจริง เป็นลูปที่ตรวจสอบเงื่อนไขการเข้าก่อนการวนซ้ำแต่ละครั้ง ดังนั้นบล็อกโค้ดอาจทำงานศูนย์ครั้งก็ได้ และไม่จำเป็นต้องใช้คำสั่ง EXIT อย่างชัดเจน

ลูป While ใน PL/SQL คืออะไร?
การขอ ในขณะที่วนซ้ำ ใน PL/SQL การทำงานจะคล้ายกับคำสั่งลูปพื้นฐาน ยกเว้นว่าเงื่อนไขการออกจากลูปจะอยู่ที่จุดเริ่มต้นของลูป มันทำงานเหมือนลูปตรวจสอบการเข้า โดยที่บล็อกการทำงานจะทำงานก็ต่อเมื่อเงื่อนไขเป็นจริงเท่านั้น เพราะมีการตรวจสอบเงื่อนไขการออกจากลูปก่อนที่จะเริ่มทำงาน
ไม่จำเป็นต้องใช้คำว่า 'EXIT' เพื่อออกจากลูปโดยตรง เนื่องจากจะตรวจสอบเงื่อนไขโดยปริยายทุกครั้ง
PL/SQL ในขณะที่ไวยากรณ์วนซ้ำ
WHILE <EXIT condition> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
- คำว่า 'WHILE' ใช้สำหรับเริ่มต้นลูป และ 'END LOOP' ใช้สำหรับสิ้นสุดลูป
- เงื่อนไขการออกจากโปรแกรมจะถูกประเมินทุกครั้งก่อนที่ส่วนการประมวลผลจะเริ่มทำงาน
- บล็อกการทำงานประกอบด้วยโค้ดทั้งหมดที่จำเป็นต้องเรียกใช้งาน
- ส่วนการประมวลผลสามารถประกอบด้วยคำสั่งใดๆ ก็ได้ที่สามารถเรียกใช้งานได้
ตัวอย่างของการ Oracle PL/SQL ในขณะที่วนซ้ำ
ในตัวอย่างนี้ เราจะพิมพ์ตัวเลขตั้งแต่ 1 ถึง 5 โดยใช้คำสั่งวนซ้ำ WHILE

DECLARE a NUMBER := 1; BEGIN dbms_output.put_line('Program started'); WHILE (a <= 5) LOOP dbms_output.put_line(a); a:= a+1; END LOOP; dbms_output.put_line('Program completed'); END; /
Code คำอธิบาย:
- Code สาย 2: ประกาศตัวแปร 'a' เป็นชนิด 'NUMBER' และกำหนดค่าเริ่มต้นเป็น '1'
- Code สาย 4: แสดงข้อความ “โปรแกรมเริ่มต้นแล้ว”
- Code สาย 5: คำสั่ง 'WHILE' เป็นจุดเริ่มต้นของลูปและตรวจสอบว่าค่าของ 'a' น้อยกว่าหรือเท่ากับ 5 หรือไม่
- Code สาย 7: พิมพ์ค่าของ 'a'
- Code สาย 8: เพิ่มค่าของ 'a' ขึ้น 1
- Code สาย 9: คำหลัก 'END LOOP' ใช้เพื่อระบุจุดสิ้นสุดของบล็อกการทำงาน
- บรรทัดที่ 7 และ 8 จะทำงานต่อไปจนกว่าค่า 'a' จะถึง 6 ซึ่ง ณ จุดนั้นเงื่อนไขจะส่งคืนค่า FALSE และการควบคุมจะออกจากโปรแกรม ห่วง.
- Code สาย 10: พิมพ์ข้อความ “โปรแกรมเสร็จสมบูรณ์”
ลูป WHILE เทียบกับ ลูป FOR เทียบกับ ลูปพื้นฐาน
PL/SQL มีลูปอยู่สามประเภท และการเลือกใช้ลูปที่เหมาะสมจะช่วยให้โค้ดอ่านง่ายขึ้น ลูป WHILE เหมาะสำหรับการทำซ้ำตามเงื่อนไข ในขณะที่อีกสองประเภทเหมาะสำหรับการนับจำนวนครั้งที่แน่นอนหรือการออกจากลูปที่ควบคุมอย่างชัดเจน
| ห่วง | เกณฑ์การออก | เหมาะสำหรับใช้เมื่อ |
|---|---|---|
| ลูป WHILE | เงื่อนไขด้านบนกลายเป็นเท็จ | ไม่ทราบจำนวนรอบการทำซ้ำ |
| สำหรับห่วง | ตัวนับถึงจุดสิ้นสุดของช่วง | ทราบจำนวนรอบการทำซ้ำแล้ว |
| ลูปพื้นฐาน | ระบุ EXIT อย่างชัดเจนในบล็อก | ทางออกถูกควบคุมด้วยตนเอง |
เนื่องจากลูป WHILE ตรวจสอบเงื่อนไขที่ด้านบน ดังนั้นส่วนของลูปอาจทำงานศูนย์ครั้งหากเงื่อนไขเป็นเท็จตั้งแต่เริ่มต้น นี่คือความแตกต่างที่สำคัญจากลูปพื้นฐาน ซึ่งส่วนของลูปจะทำงานอย่างน้อยหนึ่งครั้งเสมอ
การหลีกเลี่ยงลูป while ที่ไม่มีที่สิ้นสุด
ลูป WHILE ขึ้นอยู่กับการที่ตัวแปรควบคุมเคลื่อนที่เข้าใกล้เงื่อนไขการออกจากลูปเท่านั้น หากตัวแปรควบคุมไม่เคลื่อนที่เข้าใกล้เงื่อนไขดังกล่าว ลูปจะทำงานไปเรื่อยๆ และโปรแกรมจะหยุดทำงาน มีสามวิธีที่จะช่วยป้องกันปัญหานี้:
- เปลี่ยนค่าตัวนับทุกครั้งที่วนซ้ำ ตัวอย่างนี้เพิ่มค่า 'a' ภายในลูป การลบโค้ดบรรทัดนั้นจะทำให้ลูปทำงานไปเรื่อยๆ อย่างไม่มีที่สิ้นสุด
- ทดสอบขอบเขต ยืนยันว่าเงื่อนไขนั้นสามารถเป็นเท็จได้จริงสำหรับค่าเริ่มต้น ไม่ใช่แค่ในกรณีอุดมคติเท่านั้น
- เพิ่มข้อความ "ทางออกฉุกเฉินเมื่อ..." สำหรับลูปที่ขับเคลื่อนด้วยข้อมูล คำสั่ง EXIT WHEN เมื่อถึงจำนวนรอบการวนซ้ำสูงสุด จะทำหน้าที่เป็นตัวป้องกันค่าที่ไม่คาดคิด
เมื่อจำนวนครั้งในการทำซ้ำถูกกำหนดไว้อย่างตายตัว ลูป FOR จะช่วยขจัดความเสี่ยงทั้งหมด เนื่องจากตัวนับจะถูกจัดการโดยอัตโนมัติ
