这回说的是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错误。