Exception สำหรับ PL/SQL
วิธีการใช้งาน PL/SQL โดยคุณสมบัติที่สำคัญเพื่อให้การเขียน PL/SQL ง่ายขึ้น Oracle จึงได้สร้าง Exception ไว้เพื่อให้ง่ายต่อการเขียน ซึ่งเหมือนกับ Java Program โดยใช้ try… catch() โดยวิธีการเขียน สามารถเขียนได้ดังตัวอย่างด้านล่างครับ
DECLARE
tmp varchar2(100);
BEGIN
executable_section
EXCEPTION
WHEN exception_name1 THEN
[statements]
WHEN exception_name2 THEN
[statements]
WHEN exception_name_n THEN
[statements]
WHEN OTHERS THEN
[statements]
END;
โดย Exception ที่มีให้ใช้สามารถอธิบาย ได้ดังตัวอย่างด้านล่างนี้
ชื่อ Oracle Exception Oracle Error คำอธิบาย
DUP_VAL_ON_INDEX ORA-00001 เกิดขึ้นเมื่อสั่งให้มีการ Insert ข้อมูลที่มี Primary key ซ้ำกัน
TIMEOUT_ON_RESOURCE ORA-00051 เมื่อเกิด Time-out สำหรับการทำงานที่นาน เกินเวลาที่กำหนด
INVALID_CURSOR ORA-01001 เกิดเมื่อพยายามทำการเรียก Cursor โดยที่ยังไม่ได้เปิด Cursor หรือเกิดเมื่อพยายามที่จะสั่ง Fetch หรือ Close ก่อนที่จะทำการ Open Cursor .
NOT_LOGGED_ON ORA-01012 เกิดเมื่อพยายามสั่งคำสั่ง ขณะที่ยังไม่ได้ Log in เข้าสู่ดาต้าเบส
LOGIN_DENIED ORA-01017 เกิดเมื่อการพยายาม Log in แล้วใส่ User Name หรือ Password ผิด
NO_DATA_FOUND ORA-01403 เกิดมีการพยายาม Select ข้อมูล และไม่มีข้อมูลใดๆ ตรงกับเงื่อนไข(where clause)
TOO_MANY_ROWS ORA-01422 เกิดมีการพยายาม Select Into และข้อมูลตามเงื่อนไข(where clause) เกิดมากกว่า 1 แถวข้อมูล
ZERO_DIVIDE ORA-01476 เกิดเมื่อมีการใช้คำสั่งการหารค่าด้วย 0
INVALID_NUMBER ORA-01722 เกิดมีการพยามแปลงค่าจากค่าตัวอักษรเป็นตัวเลข โดยใช้คำสั่ง เช่น to_number(’abc2′) สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ หลักการแปลงประเภทข้อมูล (PL/SQL)
STORAGE_ERROR ORA-06500 เกิดเมื่อ Memory ที่ของเครื่องมีไม่เพียงพอ
PROGRAM_ERROR ORA-06501 ”Contact Oracle support” อาจจะต้องติดต่อ Oracle Support เกิดจากปัญหาภายใน DataBase
VALUE_ERROR ORA-06502 เกิดเมื่อพยายาม Convert ข้อมูลต่างๆ โดยข้อมูลนั้นไม่สามารถ Convert ได้ สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ หลักการแปลงประเภทข้อมูล (PL/SQL)
CURSOR_ALREADY_OPEN ORA-06511 เกิดเมื่อพยายามเปิด Cursor ที่เคยเปิดไปแล้วซ้ำ โดยยังไม่ได้ปิด Cursor นั้นๆ
ตัวอย่างการใช้งาน
Declare
v_name Number(10) ;
Begin
Select to_number(salary)
Into v_name
From employee
Where emp_id = ‘00001’ ;
Exception When No_Data_Found Then
Begin /*Blockที่ 1 เมื่อไม่พบข้อมูล*/
dbms_output.put_line(’ไม่พบข้อมูล’);
End;
Exception When Too_Many_Rows Then
Begin /*Blockที่ 2 เมื่อพบข้อมูลมากกว่า 1 เรคคอร์ด*/
dbms_output.put_line(’พบข้อมูลมากกว่า 1 Record’);
End;
Exception When Invalid_Number Then
Begin /*Blockที่ 3 เมื่อมีการใช้คำสั่ง Convert ข้อมูลเป็นตัวเลข และไม่สามารถทำได้*/
dbms_output.put_line(’ไม่สามารถแปลงข้อมูลได้’);
End;
Exception When Others Then
Begin /*Blockที่ 4 เมื่อเกิดกรณีอื่นๆ ที่ไม่ได้กำหนดไว้*/
dbms_output.put_line(’เกิดกรณีอื่นๆ ที่ไม่ได้กำหนดไว้’);
End;
End ;
0 ความคิดเห็น:
แสดงความคิดเห็น
สมัครสมาชิก ส่งความคิดเห็น [Atom]
<< หน้าแรก