คำชี้แจงกรณีใน 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) ที่จะเลือกตัวเลือกอื่นแทน เคยเลือกมากกว่าสองทางเลือกเป็นส่วนใหญ่