ORA-06512: at line <number>


ORA-06512: at line <number>



این خطا به دلیل پشته ای که با exception کنترل نشده در کد شما رخ می دهد.


1)وضعیتی که باعث خطای کنترل نشده است را درست کنید.

2)برای این خطای کنترل نشده کنترل کننده exception بنویسید.

3)با dba برای کمک تماس بگیرید.


1) مثال:


SQL> CREATE OR REPLACE PROCEDURE TestProc

  2  AS

  3    v_number number(2);

  4  BEGIN

  5    v_number := 100;

  6  END;

  7  /


Procedure created.



در زمان اجرا این خطاها را میدهد:


SQL> execute TestProc();

BEGIN TestProc(); END;


*

ERROR at line 1:

ORA-06502: PL/SQL: numeric or value error: number precision too large

ORA-06512: at "EXAMPLE.TESTPROC", line 5

ORA-06512: at line 1


خط اول از پیغام خطا (یعنی: ORA-06502) نشان می دهد خطا رخ داده است که، در حالی که خط دوم از پیغام خطا (یعنی: ORA-06512) نشان می دهد که خطا در خط 5 از کد PLSQL رخ داده است.



در این مثال ما سعی کردیم یک شماره 3 رقمی را به یک متغیر به نام v_number بدهیم که این متغیر فقط میتواند 2 رقم داشته باشد.

اگر در تعریف متغیر برای آن 3 رقم در نظر بگیریم خظا برطرف می شود.


SQL> CREATE OR REPLACE PROCEDURE TestProc

  2  AS

  3    v_number number(3);

  4  BEGIN

  5    v_number := 100;

  6  END;

  7  /


Procedure created.



روش دوم : درست کردن خطا با کنترل توسط exception:

SQL> CREATE OR REPLACE PROCEDURE TestProc

  2  AS

  3    v_number number(2);

  4  BEGIN

  5    v_number := 100;

  6 EXCEPTION

  7   WHEN OTHERS THEN

  8      v_number := 99;

  9 END;

 10 /