วันศุกร์ที่ 14 พฤษภาคม พ.ศ. 2553

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]

<< หน้าแรก