Sunday, 17 January 2016

Exception Handling

Types of Exceptions

1. Pre Defined Exceptions
2. User Defined Exceptions
Pre Defined Exceptions
These exceptions are used to handle some logical errors known to the system are pre defined. The following are some of the important pre defined Exceptions
  1. no_data_found
This Exception raises when there is no rows to be retrieved from a table
according to given condition
  1. dup_val_on_index
This Exception raises when ever you try to store duplicate values into a
table, which has been indexed (unique indexed)
  1. cur_already_open
This Exception raises when ever your program attempts to open an already
opened cursor.
A cursor must be closed before it can be re opened. A cursor for loop
automatically opens the cursor to which it refers. So Your program can not open that cursor inside the loop
  1. invalid_cursor
This Exception raises when ever your program attempts an illegal cursor operation, such as closing an un opened cursor
  1. zero_divide
This Exception raises when ever your program attempts to divide a number
by zero
  1. program_error
This Exception raises when ever PL/SQL has internal problem
  1. storage_error
This Exception raises when ever PL/SQL runs out of memory
  1. too_many_rows
This Exception raises when ever a select statement returns more than one
row
  1. login_denied
This Exception raises when ever your program attempts to logon to oracle
with an invalid user name and/or password
  1. value_error
This Exception raises when ever an arithmetic conversion or size constraint error occurs
For ex, when your program selects a column value into a variable. If the value is longer than the declared length of the variable, pl/sql abords the assignment and raise the exception value_error
Programs On Exceptions
1. Write a program for handling an error when we try to open an already opened cursor
declare
cursor c1 is select * from emp;
x emp%rowtype;
begin
open c1;
fetch c1 into x;
dbms_output.put_line(x.empno||' '||x.ename);
--open c1;
close c1;
exception
when cursor_already_open then
dbms_output.put_line(' sorry friend, cursor already opened');
end;
/
2. Write a program to display a message when no data found in the main table
declare
e emp%rowtype;
begin
select * into e from emp where empno=&empno;
dbms_output.put_line('Empno Ename job');
dbms_output.put_line(e.empno||' '||e.ename||' '||e.job);
exception
when No_data_found then
dbms_output.put_line(' sorry friend, no data found');
end;
/
3. Write a program for handling an error when we insert a duplicate value into a column.
declare
n sample%rowtype;
begin
insert into sample values(&sno,'&sname','&class');
dbms_output.put_line('Record Inserted....');
exception
when dup_val_on_index then
dbms_output.put_line(' sorry friend, you entered a duplicate value');
end;
/
Note : create a table with unique constraint, for dup_val_on_index,
  • create table sample(sno number(3),sname varchar2(10));
  • CREATE UNIQUE INDEX IDX_SAM ON SAMPLE(SNO);


4. Write a program for handling an error when we try to close an un opened cursor
declare
cursor c1 is select * from emp;
begin
--open c1;
dbms_output.put_line(' cursor is Opened');
close c1;
exception
when invalid_cursor then
dbms_output.put_line(' sorry friend, No such cursor is opened');
end;
/

Note : if u remove comment for open c1 then output is cursor is opened, other wise the you will get “sorry friend, no such cursor is opened ..”, since you r trying to close an unopened cursor


5. Write a program for handling an error when we try to divide a value with zero


declare
a number:=&a;
b number:=&b;
c number;
begin
c:=a/b;
dbms_output.put_line(c);
exception
when zero_divide then
dbms_output.put_line('Zero Divide error');
end;
/


6. Write a program for handling an error when ever the program retrieves too many rows
declare
e emp%rowtype;
begin
select * into e from emp;
exception
when too_many_rows then
dbms_output.put_line(' sorry friend, too many rows are selected');
end;


/


User Defined Exceptions
A user can define or create exceptions, which must be raised automatically, because the system does not knows when to execute the user defined errors. There are 3 steps while working with user defined exceptions


1. Creating Exception


2. Raising Exception


3. Handling Exception
The main purpose of user defined exceptions is, we can display a message in predefined error format in the instances not known to the system or that are not predefined


Syntax :
Declare
<Exception Name> Exception;
begin
Raise Exception;
Exception
When <Exception name> then
Message
End;

/


Raise_Application_Error

This is a keyword, which is used to generate an error message in pre defined error format for the given user defined error


Syntax :
Raise_Application_Error(Error number, ‘ message ‘);




Example :

Raise_Application_Error(-20173, ‘ Some Error ‘);

Note : Error Number for (user defined Exceptions) must be in between –20001 to -20999


1. Write a program for creating an exception and raising it when the basic is <3000, while inserting rows into a table and also handle it to perform any other action
Declare
invalid_salary exception;
s employee.sal%type:=&sal;
begin
if s<3000 then
raise invalid_salary;
else
insert into employee(sal) values (s);
dbms_output.put_line(' Record Inserted.....');
end if;
exception
when invalid_salary then
dbms_output.put_line(' salary must be >3000 ');
end;
/
2. Write a program for creating an exception and raising it when ever you try to insert any negative number into a table
Declare
invalid_number exception;
e employee.empno%type:=&empno;
begin
if e<0 then
raise invalid_number;
else
insert into employee(empno) values (e);
dbms_output.put_line(' Record Inserted.....');
end if;
exception
when invalid_number then
dbms_output.put_line(' Number must be positive ');
end;


/

No comments:

Post a Comment