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

猜你喜欢

转载自greemranqq.iteye.com/blog/1895431