你的位置:首页 > 数据库

[数据库]oracle异常


使用oracle系统游标处理数据

 

实例代码:

--set serveroutput on;
create or replace procedure split_page_procedure(page_index in number,
page_size in number,
key_word in varchar2) is

  my_curser SYS_REFCURSOR;
--分页参数
page_count number(7);
min_index number(7); --起始位置
max_index number(7); --结束位置
--打印参数
name_param userlogin.user_name%type;
uid_param userlogin.user_id%type;

begin
if (page_index < 1) or (page_size < 1) then
  RAISE NO_DATA_FOUND;
end if;
--参数校验
--设置分页参数 分页参数值最少为1,
min_index := (page_index - 1) * page_size - 1;
max_index := page_index * page_size;
--利用分页查询数据;
open my_curser for
select i.user_name, i.user_id name
from (select u.*, rownum rn from userlogin u where rownum < max_index) i
where i.rn > min_index;
loop
FETCH my_curser
INTO name_param, uid_param;
--游标取不到数据则退出
exit when my_curser%NOTFOUND;
dbms_output.put_line('参数:name:' || name_param || ' uid:' || uid_param);
end loop;
close my_curser;
--査取总记录
select count(1) into page_count from userlogin;
dbms_output.put_line('返回的总记录条数:' || page_count);

--异常处理
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('分页参数不合理 page_index:' || page_index ||
      ' page_size:' || page_size);
  WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(SQLCODE || '---' || SQLERRM);
end split_page_procedure;

 

方法一, 直接抛

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SQL> DECLARE
  2    -- 测试异常.
  3    e_test_exception EXCEPTION;
  4  BEGIN
  5
  6    -- 直接抛出异常,测试下面的捕获
  7    RAISE e_test_exception;
  8
  9    EXCEPTION
 10      WHEN e_test_exception THEN
 11        dbms_output.put_line('Test Error !');
 12      WHEN OTHERS THEN
 13        dbms_output.put_line('OTHERS Error!');
 14  END;
 15  /
Test Error !
 
PL/SQL procedure successfully completed.

 

方法二, 定义个错误代码与消息后, 再抛。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> BEGIN
  2    -- 错误代码允许的范围是 -20,000~20,999
  3    RAISE_APPLICATION_ERROR(-20000, 'My Error Happen!');
  4
  5    EXCEPTION
  6      WHEN OTHERS THEN
  7        dbms_output.put_line('Error Code = ' || TO_CHAR(SQLCODE) );
  8        dbms_output.put_line('Error Message = ' || SQLERRM );
  9  END;
 10  /
Error Code = -20000
Error Message = ORA-20000: My Error Happen!
 
PL/SQL procedure successfully completed.