PL/SQL exception
handling is a mechanism for dealing with run-time errors encountered during
procedure execution. Use of this mechanism enables execution to continue if the
error is not severe enough to cause procedure termination.
The exception handler must be defined within a subprogram
specification. Errors cause the program to raise an exception with a transfer
of control to the exception-handler block. After the exception handler
executes, control returns to the block in which the handler was defined. If
there are no more executable statements in the block, control returns to the
caller.
User-Defined Exceptions
PL/SQL enables the user to define exception handlers in the
declarations area of subprogram specifications. User accomplishes this by
naming an exception as in the following example:
ot_failure EXCEPTION;
In this case,
the exception name is ot_failure. Code
associated with this handler is written in the EXCEPTION specification area as
follows:
EXCEPTION
when OT_FAILURE then
out_status_code := g_out_status_code;
out_msg := g_out_msg;
The following is an example of a
subprogram exception:
EXCEPTION
when NO_DATA_FOUND then
g_out_status_code := 'FAIL';
RAISE ot_failure;
Within this exception is the
RAISE statement that transfers control back to the ot_failure exception
handler. This technique of raising the exception is used to invoke all
user-defined exceptions.
System-Defined Exceptions
Exceptions internal to PL/SQL are raised automatically upon error.
NO_DATA_FOUND is a system-defined exception. Table below gives a complete list
of internal exceptions.
PL/SQL internal exceptions.
|
Exception Name
|
Oracle Error
|
|
CURSOR_ALREADY_OPEN
|
ORA-06511
|
|
DUP_VAL_ON_INDEX
|
ORA-00001
|
|
INVALID_CURSOR
|
ORA-01001
|
|
INVALID_NUMBER
|
ORA-01722
|
|
LOGIN_DENIED
|
ORA-01017
|
|
NO_DATA_FOUND
|
ORA-01403
|
|
NOT_LOGGED_ON
|
ORA-01012
|
|
PROGRAM_ERROR
|
ORA-06501
|
|
STORAGE_ERROR
|
ORA-06500
|
|
TIMEOUT_ON_RESOURCE
|
ORA-00051
|
|
TOO_MANY_ROWS
|
ORA-01422
|
|
TRANSACTION_BACKED_OUT
|
ORA-00061
|
|
VALUE_ERROR
|
ORA-06502
|
|
ZERO_DIVIDE
|
ORA-01476
|
In addition to this list of exceptions, there is a catch-all
exception named OTHERS that traps all
errors for which specific error handling has not been established.
No comments:
Post a Comment