คำชี้แจงกรณีใน Oracle PL/SQL พร้อมตัวอย่าง
คำชี้แจงกรณีคืออะไร?
คำสั่ง CASE จะคล้ายกับคำสั่ง IF-THEN-ELSIF ที่เลือกทางเลือกหนึ่งตามเงื่อนไขจากตัวเลือกที่มีอยู่
- คำสั่ง CASE ใช้ "ตัวเลือก" แทนนิพจน์บูลีนเพื่อเลือกลำดับ
- ค่าของนิพจน์ในคำสั่ง CASE จะถือเป็นตัวเลือก
- นิพจน์อาจเป็นประเภทใดก็ได้ (เลขคณิต ตัวแปร ฯลฯ)
- แต่ละทางเลือกจะได้รับการกำหนดค่าที่กำหนดไว้ล่วงหน้า (ตัวเลือก) และทางเลือกอื่นที่มีค่าตัวเลือกที่ตรงกับค่านิพจน์เงื่อนไขจะถูกดำเนินการ
- ต่างจาก IF-THEN-ELSIF ตรงที่คำสั่ง CASE สามารถใช้ในคำสั่ง SQL ได้เช่นกัน
- บล็อก ELSE ในคำสั่ง CASE จะเก็บลำดับที่ต้องดำเนินการเมื่อไม่มีทางเลือกอื่นที่ถูกเลือก
วากยสัมพันธ์
CASE (expression) WHEN <valuel> THEN action_blockl; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- ในรูปแบบข้างต้น นิพจน์จะส่งกลับค่าที่อาจเป็นประเภทใดก็ได้ (ตัวแปร ตัวเลข ฯลฯ)
- แต่ละประโยค 'WHEN' จะถือเป็นทางเลือกอื่นที่มี และ -
- ส่วนคำสั่ง 'เมื่อ' ซึ่งตรงกับค่าของนิพจน์จะถูกเลือก และส่วนที่เกี่ยวข้อง จะถูกดำเนินการ
- บล็อก 'ELSE' เป็นทางเลือกซึ่งเก็บ ที่จำเป็นต้องดำเนินการเมื่อไม่มีทางเลือกอื่นที่ตรงกับค่านิพจน์
- เครื่องหมาย 'END' เป็นจุดสิ้นสุดของคำสั่ง CASE และเป็นส่วนบังคับของ CASE
1 ตัวอย่าง: การคำนวณเลขคณิตโดยใช้กรณี
ในตัวอย่างนี้ เราจะทำการคำนวณเลขคณิตระหว่างตัวเลข 55 และ 5
DECLARE a NUMBER :=55; b NUMBER :=5; arth_operation VARCHAR2(20) :='MULTIPLY’; BEGIN dbms_output.put_line(‘Program started.' ); CASE (arth_operation) WHEN ‘ADD’ THEN dbms_output.put_line(‘Addition of the numbers are: '|| a+b ); WHEN ‘SUBTRACT' THEN dbms_output.put_line(‘Subtraction of the numbers are: '||a-b ); WHEN ‘MULTIPLY' THEN dbms_output.put_line(‘Multiplication of the numbers are: '|| a*b ); WHEN ‘DIVIDE' THEN dbms_output.put_line(‘Division of the numbers are:'|| a/b); ELSE dbms_output.put_line(‘No operation action defined. Invalid operation'); END CASE; dbms_output.put_line(‘Program completed.' ); END; /
คำอธิบายรหัส
- รหัสบรรทัด 2: ประกาศตัวแปร 'a' เป็นประเภทข้อมูล 'NUMBER' และเริ่มต้นด้วยค่า '55'
- รหัสบรรทัด 3: ประกาศตัวแปร 'b' เป็นประเภทข้อมูล 'NUMBER' และเริ่มต้นด้วยค่า '5'
- โค้ดบรรทัด 4: ประกาศตัวแปร 'arth_operation' เป็นชนิดข้อมูล 'VARCHAR2' ขนาด 20 และกำหนดค่าเริ่มต้นด้วยค่า 'MULTIPLY'
- บรรทัดรหัส 6: การพิมพ์คำสั่ง "เริ่มต้นโปรแกรม"
- บรรทัดโค้ด 7: CASE ตรวจสอบค่าของนิพจน์ ในกรณีนี้ ค่าของตัวแปร 'arth_operation' คือ 'MULTIPLY' ค่านี้จะถือเป็นตัวเลือกสำหรับคำสั่ง CASE นี้
- โค้ดบรรทัด 10: คำสั่ง WHEN ที่มีค่า 'MULTIPLY' ตรงกับค่าตัวเลือก ดังนั้นตัวควบคุมจะเลือก action_block นี้และจะพิมพ์ข้อความ 'การคูณตัวเลขคือ: 275'
- รหัส line13: ทำเครื่องหมายจุดสิ้นสุดของคำสั่ง CASE
- รหัสบรรทัดที่ 14: การพิมพ์คำสั่ง "โปรแกรมเสร็จสมบูรณ์"
รหัสเอาท์พุท
Program started. Multiplication of the numbers are: 275 Program completed.
คำชี้แจงกรณีที่ค้นหา
คำสั่ง SEARCHED CASE จะคล้ายกับคำสั่ง CASE แทนที่จะใช้ตัวเลือกเพื่อเลือกคำสั่งอื่น SEARCHED CASE จะมีนิพจน์ที่กำหนดไว้โดยตรงในส่วนคำสั่ง WHEN
- คำสั่ง WHEN แรกที่ตรงตามเงื่อนไขจะถูกดำเนินการ และผู้ควบคุมจะข้ามตัวเลือกที่เหลือ
วากยสัมพันธ์
CASE WHEN <expression1> THEN action_blockl; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- ในรูปแบบข้างต้น แต่ละคำสั่งย่อย WHEN มีความแยกจากกัน และ -
- ส่วนคำสั่ง WHEN ที่นิพจน์ส่งคืน TRUE จะถูกดำเนินการ
- บล็อก 'ELSE' เป็นทางเลือกซึ่งเก็บ ที่จำเป็นต้องดำเนินการเมื่อไม่มีทางเลือกอื่นใดที่พอใจ
- 'END' เป็นจุดสิ้นสุดของคำสั่ง CASE และเป็นส่วนบังคับของ CASE
1 ตัวอย่าง: การคำนวณเลขคณิตโดยใช้ตัวพิมพ์ค้นหา
ในตัวอย่างนี้ เราจะทำการคำนวณเลขคณิตระหว่างตัวเลข 55 และ 5
DECLARE a NUMBER :=55; b NUMBER :=5; arth_operation VARCHAR2(20) :='DIVIDE'; BEGIN dbms_output.put_line(‘Program started.' ); CASE WHEN arth_operation = 'ADD' THEN dbms_output.put_line(‘Addition of the numbers are: '||a+b ); WHEN arth_operation = ‘SUBTRACT' THEN dbms_output.put_line(‘Subtraction of the numbers are: '|| a-b); WHEN arth_operation = ‘MULTIPLY’ THEN dbms_output.put_line(‘Multiplication of the numbers are: '|| a*b ); WHEN arth_operation = ’DIVIDE' THEN dbms_output.put_line(‘Division of the numbers are: '|| a/b ): ELSE dbms_output.put_line(‘No operation action defined. Invalid operation'); END CASE; dbms_output.put_line(‘Program completed.' ); END; /
คำอธิบายรหัส
- รหัสบรรทัด 2: ประกาศตัวแปร 'a' เป็นประเภทข้อมูล 'NUMBER' และเริ่มต้นด้วยค่า '55'
- รหัสบรรทัด 3: ประกาศตัวแปร 'b' เป็นประเภทข้อมูล 'NUMBER' และเริ่มต้นด้วยค่า '5'
- โค้ดบรรทัด 4: การประกาศตัวแปร 'arth_operation' เป็นชนิดข้อมูล 'VARCHAR2' ขนาด 20 และกำหนดค่าเริ่มต้นด้วยค่า 'DIVIDE'
- บรรทัดรหัส 6: การพิมพ์คำสั่ง "เริ่มต้นโปรแกรม"
- บรรทัดโค้ด 7: คำสั่ง SEARCHED CASE เริ่มต้นขึ้น โดยจะข้ามโค้ดจากบรรทัดที่ 8 ถึงบรรทัดที่ 13 เนื่องจากค่าตัวเลือก (ADD, SUBTRACT, MULTIPLY) ไม่ตรงกับค่าของ 'arth_operation'
- โค้ดบรรทัดที่ 14: นิพจน์เงื่อนไข WHEN “arth_operation = 'DIVIDE'” เป็นไปตามเงื่อนไข และนิพจน์ส่งคืน TRUE
- โค้ดบรรทัดที่ 15: Action_block ของคำสั่ง WHEN จะถูกดำเนินการ และจะพิมพ์ข้อความ 'Division of the numbers are: 11'
- บรรทัดโค้ด 17: ทำเครื่องหมายส่วนท้ายของคำสั่ง CASE
- บรรทัดโค้ด 18: การพิมพ์ข้อความ "Program complete"
รหัสเอาท์พุท
Program started. Division of the numbers are: 11 Program completed.
สรุป
| ประเภท | DESCRIPTION | การใช้ |
|---|---|---|
| กรณี | คล้ายกับ ถ้า-แล้ว-ELSIF คำแถลง. 'SELECTOR' ใช้ในการเลือกตัวเลือกอื่นแทนนิพจน์บูลีน | ใช้เพื่อเลือกจากทางเลือกต่างๆ โดยใช้ 'SELECTOR' |
| กรณีที่ถูกค้นหา | คำสั่ง CASE ที่ไม่มี 'SELECTOR' จริง แต่มีเงื่อนไขจริง (ซึ่งประเมินเป็น TRUE/FALSE) ที่จะเลือกตัวเลือกอื่นแทน | เคยเลือกมากกว่าสองทางเลือกเป็นส่วนใหญ่ |
