Oracle PL/SQL สำหรับ LOOP พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
Oracle ลูป FOR ใน PL/SQL จะรันบล็อกโค้ดซ้ำตามจำนวนครั้งที่กำหนดระหว่างค่าต่ำสุดและค่าสูงสุด ตัวแปรลูปถูกประกาศโดยปริยายและเพิ่มค่าเองโดยอัตโนมัติ จึงไม่จำเป็นต้องกำหนดตัวนับด้วยตนเอง และคำหลัก REVERSE จะทำให้ลูปนับถอยหลัง
ลูป FOR คืออะไร?
คำสั่ง “FOR LOOP” เหมาะที่สุดเมื่อคุณต้องการเรียกใช้โค้ดตามจำนวนครั้งที่กำหนด ไม่ใช่ขึ้นอยู่กับเงื่อนไขอื่น ๆ
ในลูปนี้ จะมีการระบุค่าต่ำสุดและค่าสูงสุด และตราบใดที่ตัวแปรในลูปอยู่ระหว่างช่วงที่กำหนด ลูปก็จะทำงาน
ตัวแปรวนซ้ำจะเพิ่มค่าขึ้นเองโดยอัตโนมัติ ดังนั้นจึงไม่จำเป็นต้องเพิ่มค่าอย่างชัดเจน ตัวแปรวนซ้ำไม่จำเป็นต้องประกาศ เนื่องจากมีการประกาศโดยปริยายอยู่แล้ว
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
คำอธิบายไวยากรณ์:
- คำว่า 'FOR' ใช้สำหรับระบุจุดเริ่มต้นของลูป และ 'END LOOP' ใช้สำหรับระบุจุดสิ้นสุดของลูป
- ตัวแปรลูปจะถูกประเมินค่าทุกครั้งก่อนที่จะเริ่มดำเนินการในส่วนของการประมวลผล
- บล็อกการทำงานประกอบด้วยโค้ดทั้งหมดที่จำเป็นต้องรัน และสามารถมีคำสั่งใดๆ ก็ได้ที่สามารถเรียกใช้งานได้
- ตัวแปร loop_variable จะถูกประกาศโดยปริยายในระหว่างการทำงานของลูป และขอบเขตการใช้งานของมันจะอยู่ภายในลูปเท่านั้น
- เมื่อค่าตัวแปรในลูปอยู่นอกช่วงที่กำหนด การควบคุมจะออกจากลูป
- ลูปสามารถทำงานในลำดับย้อนกลับได้โดยการเพิ่มคำว่า 'REVERSE' ไว้หน้า lower_limit
1 ตัวอย่าง: ในตัวอย่างนี้ เราจะพิมพ์ตัวเลขตั้งแต่ 1 ถึง 5 โดยใช้คำสั่งลูป FOR
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code คำอธิบาย:
- Code สาย 2: แสดงข้อความ “โปรแกรมเริ่มต้นแล้ว”
- Code สาย 3: คำว่า 'FOR' เป็นคำที่ใช้กำหนดจุดเริ่มต้นของลูป และมีการประกาศตัวแปรลูป 'a' ซึ่งมีค่าตั้งแต่ 1 ถึง 5
- Code สาย 5: พิมพ์ค่าของ 'a'
- Code สาย 6: คำหลัก 'END LOOP' ใช้เพื่อระบุจุดสิ้นสุดของบล็อกการทำงาน
- บรรทัดที่ 5 จะทำงานต่อไปจนกว่าค่า 'a' จะถึง 6 ซึ่ง ณ จุดนั้นเงื่อนไขจะล้มเหลวและโปรแกรมจะออกจากลูป
- Code สาย 7: พิมพ์ข้อความ “โปรแกรมเสร็จสมบูรณ์”
ลูปซ้อน
คำสั่งลูปสามารถซ้อนกันได้ โดยลูปภายนอกและลูปภายในอาจมีประเภทต่างกัน ในลูปซ้อนกัน ในแต่ละรอบของการทำงานของลูปภายนอก ลูปภายในจะทำงานจนเสร็จสมบูรณ์
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
คำอธิบายไวยากรณ์:
- ห่วงด้านนอกมีห่วงอีกห่วงหนึ่งอยู่ด้านใน
- ลูปสามารถเป็นประเภทใดก็ได้ และฟังก์ชันการทำงานจะเหมือนกัน
1 ตัวอย่าง: ในตัวอย่างนี้ เราจะพิมพ์ตัวเลขตั้งแต่ 1 ถึง 3 โดยใช้คำสั่งลูป FOR โดยแต่ละตัวเลขจะถูกพิมพ์ซ้ำตามจำนวนครั้งของค่าตัวเลขนั้น
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code คำอธิบาย:
- Code สาย 2: กำหนดชนิดข้อมูลให้กับตัวแปร 'b' เป็น 'NUMBER'
- Code สาย 4: แสดงข้อความ “โปรแกรมเริ่มต้นแล้ว”
- Code สาย 5: คำว่า 'FOR' เป็นคำที่ใช้กำหนดจุดเริ่มต้นของลูป และมีการประกาศตัวแปรลูป 'a' ซึ่งมีค่าตั้งแต่ 1 ถึง 3
- Code สาย 7: รีเซ็ตค่า 'b' เป็น '1' ในแต่ละครั้ง
- Code สาย 8: ด้านใน ในขณะที่วนซ้ำ ตรวจสอบเงื่อนไข a>=b
- Code สาย 10: พิมพ์ค่า 'a' ตราบใดที่เป็นไปตามเงื่อนไขข้างต้น
- Code สาย 14: พิมพ์ข้อความ “โปรแกรมเสร็จสมบูรณ์”
ลูป FOR และลูป FOR ย้อนกลับ
โดยปกติแล้วลูป FOR จะนับขึ้นจากขีดจำกัดล่างไปยังขีดจำกัดบน การเพิ่มคำว่า REVERSE จะทำให้มันนับลงในขณะที่ยังคง...ping ขีดจำกัดอยู่ในลำดับเดียวกัน ทั้งสองรูปแบบแสดงไว้ด้วยกันด้านล่างเพื่อให้เห็นความแตกต่างได้อย่างชัดเจน
| ฟอร์ม | ส่วนหัว | ลำดับของค่า |
|---|---|---|
| น้อยไปหามาก | สำหรับ IN 1 .. 5 | 1, 2, 3, 4, 5 |
| มากไปหาน้อย | สำหรับแบบย้อนกลับ 1 .. 5 | 5, 4, 3, 2, 1 |
โปรดทราบว่าแม้จะใช้คำสั่ง REVERSE ค่าต่ำสุดก็ยังคงถูกเขียนไว้ก่อนค่าสูงสุดอยู่ดี เพียงแต่ทิศทางการวนซ้ำเท่านั้นที่เปลี่ยนไป สำหรับลูปที่ไม่ทราบจำนวนครั้งล่วงหน้า ลูปพื้นฐาน เป็นทางเลือกที่ดีกว่า





