Oracle PL/SQL Tips: How to Show Oracle Error ORA- in Procedure Exception

Oracle PL/SQL Tips: How to Show Oracle Error ORA- in Procedure Exception

สวัสดีครับ พบกันอีกครั้งกับ Oracle PL/SQL Tips วันนี้มีเกล็ดเล็กๆน้อยๆมาฝากเกี่ยวกับการเขียน Procedure
โดยปกติแล้วการเขียน Oracle Procedure หรือโปรแกรมทั่วไป เราควรมีการดักข้อผิดพลาดที่จะเกิดขึ้นด้วย
สำหรับ Oracle Procedure เราเรียกส่วนการดักข้อผิดพลาดนี้ว่า “Exception”

เมื่อข้อผิดพลาดใดๆเกิดขึ้นจากโค้ดโปรแกรมหลัก มันก็จะมาทำงานต่อในส่วนของ Exception และเพื่อให้เกิดประโยชน์
ถ้าเราสามารถแสดงข้อผิดพลาดนั้นออกมาพร้อมกับ Error Code ด้วยจะยิ่งทำให้เราตรวจสอบหาสาเหตุได้ง่ายขึ้น

ดังนั้นในวันนี้จึงขอนำเสนอการเขียน Exception ที่แสดง Oracle Code, Oracle Error, ออกมาให้เห็นข้อความตัวเป็นๆเลย โดยมีชุดฟังก์ชันที่เกี่ยวข้องดังนี้

1. DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
เป็นฟังก์ชันที่จะแสดงชื่อโปรแกรม หรือ ชื่อ procedure ที่เรียกรัน พร้อมกับบรรทัดที่เกิด error

2. DBMS_UTILITY.FORMAT_ERROR_STACK
เป็นฟังก์ชันที่จะแสดง Oracle Error Code + Error Message

3. SQLCODE
เป็นฟังก์ชันที่จะแสดงเฉพาะ Oracle Error Code เผื่อว่าเราจะแยกเก็บ Error Code

4. SQLERRM
เป็นฟังก์ชันที่แสดง Oracle Error Code + Error Message เหมือนกับข้อ 2 DBMS_UTILITY.FORMAT_ERROR_STACK

ตัวอย่าง การเขียน Exception เมื่อมีการคำนวนค่า 1 หารด้วย 0 จะต้องขึ้นข้อความ error
โดยจะใช้ Exception จากฟังก์ชันทั้ง 4 ดังนี้

CREATE OR REPLACE PROCEDURE TEST_EXCEPTIONIS verror_desc1 varchar2 ( 1000 );

verror_desc2 varchar2 ( 1000 );

verror_desc3 varchar2 ( 1000 );

verror_desc4 varchar2 ( 1000 );

vnum number ;

 BEGIN

 select 1 / 0 into vnum from dual ;

 Exception when others then

 verror_desc1 := DBMS_UTILITY.FORMAT_ERROR_BACKTRACE ;

verror_desc2 := DBMS_UTILITY.FORMAT_ERROR_STACK ;

verror_desc3 := SQLCODE ;

verror_desc4 := SQLERRM;

 dbms_output.put_line ( ‘1. ERR_BACKTRACE = ‘||verror_desc1 );

dbms_output.put_line ( ‘2. ERR_STACK = ‘||verror_desc2 );

dbms_output.put_line ( ‘3. SQLCODE= ‘||verror_desc3 );

dbms_output.put_line ( ‘4. SQLERRM = ‘||verror_desc4 );

 END ;

/

ทดสอบ exception กัน

1. Loging to Oracle database (ในที่นี้ผมใช้ SQLPLUS ธรรมดา)
2. กำหนด environment “serveroutput” ให้มีการแสดงข้อความออกที่หน้าจอ
           SQL> set serveroutput on
3. รันโปรแกรมได้ผลลัพธ์ดังนี้

SQL> exec TEST_EXCEPTION1. ERR_BACKTRACE = ORA-06512: at “KOKIT.TEST_EXCEPTION”, line 12

 2. ERR_STACK = ORA-01476: divisor is equal to zero

 3. SQLCODE= -1476

4. SQLERRM = ORA-01476: divisor is equal to zero

 PL/SQL procedure successfully completed.

เท่านี้เราก็สามารถเห็นข้อความ error และจัดเก็บลง Log เพื่อเป็นประวัติการทำงานได้แล้วครับ

ท้ายที่สุดนี้ ขอขอบคุณน้อง hanoi , Nipaporn M. ที่ส่งอัพเดท Oracle PL/SQL Tips นี้มาให้ครับ

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *