PL/SQL 自定义异常(五)
oracle 有时候 写过程会用到异常,我用得不多,这里简单介绍一下;
?
set serveroutput on;DECLARE -- 声明一个异常 my_exception exception; -- 定义异常名,错误码:-20000 .. -20999 pragma exception_init (my_exception, -20020);BEGIN -- 直接抛出异常,关键字raise + exception_name raise my_exception;end;
?
-- 这个异常直接抛出,但是没有说明,不方便查看,也可以这样:DECLARE v_name varchar2(100); -- 声明一个异常 my_exception exception; -- 初始化这个异常,错误码:-20000 .. -20999 pragma exception_init (my_exception, -20020);BEGIN -- 有很多系统自定义的异常:比如no_data_found,可以尝试 raise my_exception; exception when my_exception then dbms_output.put_line('这是测试的异常'); when others then dbms_output.put_line('异常!'); end;
?
?
-- 当然我一般使用上抛的服务端的异常,不用声明DECLARE v_num number;BEGIN select count(*) into v_num from test_table where user_id =1; if v_num >0 then -- raise_application_error 这是一个遗产过程,参数分别是:sqlcode,errmsg,[true,false] -- sqlcode 错误码-20000到-200999,msg 错误信息,不能超过2K -- 最后参数默认false, 用以判断是否保存在堆栈。 raise_application_error(-20005, '测试异常!'); end if;end;
?
?
提示:1.这里只是简单说明了下,异常我用得不多,一般系统定义的就够了。可以定义一些参数,用于存放异常信息,并返回,在客户端进行反映
? ? ?2.两种异常其实是一个,系统定义了很多异常,可参考:http://cache.baiducontent.com/c?m=9d78d513d99e01fc09b3c3690d67c0171243f46
? ?82ba6d1020bd18449e3732d41501192ac57230777d2d27c1616af384beb802103461457c18cb8f95dabba85295f9f5134676bf75662d20edcca5124b137e658fede1ef0cb8425e0aec6949f0a5c9015433897f1f8471d449432a5033194f7d81e494810cdb16723e2072d629f204bbd5aaaa0743556dfa1c00a1b85798b3f508aaa34b33b16bf19&p=8d769a47838811a058ee973f53568d&newp=93628b0e85cc43ff57ed977d5b548c231610db2151d1d712&user=baidu&fm=sc&query=oracle+%C9%F9%C3%F7%D2%EC%B3%A3+%2C%CC%ED%BC%D3%D2%EC%B3%A3%D0%C5%CF%A2&qid=&p1=1