这回说的是ORACLE中异常处理,开发过程如果想使用自定义的EXCEPTION,并且还需要具有特定的异常捕获,此时需要加你的异常与ORACLE错误代码关联才能有特殊的效果。下面来看个例子:
-- Create table
create table test
(
tst001 number(3),
tst002 varchar2(20),
tst003 varchar2(20)
);
-- Create/Recreate primary, unique and foreign key constraints
alter table test
add constraint pk_test_tst001 primary key (TST001);
--Insert Records
insert into test values(100,'test1','test1');
insert into test values(101,'test2','test2');
commit;
--Create Procedure
create or replace PROCEDURE PRC_TEST(PRM_APPCODE OUT NUMBER,PRM_ERRMSG OUT VARCHAR2)
EXCEPTION E_LOCKSTATE;
PRAGMA EXCEPTION_INIT(E_LOCKSTATE,-54);
row_test test%rowtype;
IS
BEGIN
--初始化
prm_appcode :=1;
begin
select * into row_test from test where tst001 = 100 for update;
exception
when e_lockstate then
prm_appcode := -100;
prm_errmsg :='100这条记录被锁定';
when others then
prm_appcode := -1;
prm_errmsg := sqlerrm;
end;
END PRC_TEST;
------运行上述例子如果此时有两个客户端同时操作test tst001=100的这条记录,谁优先操作谁就先获得操作该记录-------的权力。
其实这个也是很简单,就是把自定义的EXCEPTION与系统的EXCEPTION关联上,比如上面记录被锁定的EXCEPTION刚好是ORACLE中ORA-000054错误。