What is Exception ?
Whenever error occurred in executable area (ie. in begin block) then exception will raise and program will terminate .
Difference Between Calling and Called program
----------------------------------------------
A program contain many programs inside then it is called as calling program.
A program called by another program then it is called as called program.
Exception Works
================
1.If exception handled in both calling and called environment .Then any exception arrives inside the called program then exception will be handled by itself
only(ie. called program) and program will not terminate until exception raised in calling environment or execute completely.
2.While handling exception in calling environment but not in called environment .Then any exception arrives inside the called program then exception will be
handled by called one and program terminates immediately.
Check With Following Examples
=================================
Step 1: Drop Table If Exists
+++++++++++++++++++++++++++++
drop table error;
drop table tab_1;
drop table tab_2;
drop table tab_3;
Step 2: Create Table
+++++++++++++++++++++
create table error ( value number, status varchar2(1000),st_date timestamp,nam_tab varchar2(50));
create table tab_1 (a number , dup_num number, name varchar2(30));
create table tab_2 (a number , dup_num number, name varchar2(30));
create table tab_3 (a number , dup_num number, name varchar2(30));
Step 3: Drop Sequence
+++++++++++++++++++++++++++++
drop sequence test_seq;
Step 4 : create Sequence
++++++++++++++++++++++++
create sequence test_seq increment by 1 start with 1 maxvalue 100 nocache nocycle;
Step 5:= Create Packages use exception in both calling and called environment
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
create or replace package pack_one
as
procedure p1(p_a number);
end pack_one;
/
create or replace package body pack_one
as
procedure p1(p_a number)
as
v_num number;
v_error varchar2(4000);
begin
select dup_num
into v_num
from tab_1
where a = p_a;
dbms_output.put_line('Step 1 ..........................');
pack_two.p2(v_num);
dbms_output.put_line('Step 2 ..........................');
pack_three.p3(v_num);
dbms_output.put_line('Step 3 ..........................');
Exception
when others then
v_error := substr(sqlerrm,1,100);
insert into error values(test_seq.nextval ,v_error,sysdate,'pack_one.p1');
end p1;
end pack_one;
/
create or replace package pack_two
as
procedure p2(p_a number);
end pack_two;
/
create or replace package body pack_two
as
procedure p2(p_a number)
as
v_num number;
v_error varchar2(4000);
begin
select dup_num
into v_num
from tab_2
where a = p_a;
Exception
when others then
v_error := substr(sqlerrm,1,100);
insert into error values(test_seq.nextval ,v_error,sysdate,'pack_one.p2');
end p2;
end pack_two;
/
create or replace package pack_three
as
procedure p3(p_a number);
end pack_three;
/
create or replace package body pack_three
as
procedure p3(p_a number)
as
v_num number;
v_error varchar2(4000);
begin
select dup_num
into v_num
from tab_3
where a = p_a;
Exception
when others then
v_error := substr(sqlerrm,1,100);
insert into error values(test_seq.nextval ,v_error,sysdate,'pack_one.p3');
end p3;
end pack_three;
/
Step 6: Truncate Table rows only
+++++++++++++++++++++++++++++++++
Truncate table tab_1;
Truncate table tab_2;
Truncate table tab_3;
Step 7 : Insert Few Rows
++++++++++++++++++++++++++
Insert into tab_1 values(1,20,'Hello');
Insert into tab_2 values(2,3,'Hi');
Insert into tab_3 values(20,1,'Wow');
set serveroutput on
execute pack_one.p1(1);
Select * from error;
Step 8 : Create Package by writing Exception only in calling package (eg.pack_one)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
create or replace package pack_one
as
procedure p1(p_a number);
end pack_one;
/
create or replace package body pack_one
as
procedure p1(p_a number)
as
v_num number;
v_error varchar2(4000);
v_seq number;
begin
select dup_num
into v_num
from tab_1
where a = p_a;
dbms_output.put_line('Step 1 ..........................');
pack_two.p2(v_num);
dbms_output.put_line('Step 2 ..........................');
pack_three.p3(v_num);
dbms_output.put_line('Step 3 ..........................');
Exception
when others then
v_error := substr(sqlerrm,1,100);
insert into error values(test_seq.nextval ,v_error,sysdate,'pack_one.p1');
end p1;
end pack_one;
/
create or replace package pack_two
as
procedure p2(p_a number);
end pack_two;
/
create or replace package body pack_two
as
procedure p2(p_a number)
as
v_num number;
v_error varchar2(4000);
begin
select dup_num
into v_num
from tab_2
where a = p_a;
end p2;
end pack_two;
/
create or replace package pack_three
as
procedure p3(p_a number);
end pack_three;
/
create or replace package body pack_three
as
procedure p3(p_a number)
as
v_num number;
v_error varchar2(4000);
begin
select dup_num
into v_num
from tab_3
where a = p_a;
end p3;
end pack_three;
/
Step 9: Truncate Table rows only
+++++++++++++++++++++++++++++++++
Truncate table tab_1;
Truncate table tab_2;
Truncate table tab_3;
Step 10 : Insert Few Rows
++++++++++++++++++++++++++
Insert into tab_1 values(1,20,'Hello');
Insert into tab_2 values(2,3,’Hi’);
Insert into tab_3 values(20,1,'Wow');
set serveroutput on
execute pack_one.p1(1);
Select * from error;
Prepared By
S Sivakurunath