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