数据库之【异常处理篇】

****************************

数据库之【异常处理篇】

****************************


--预定义异常详细列表
access_into_null    在未初化对象时出现
case_not_found      在CASE语句中的选项与用户输入的数据不匹配时出现
collection_is_null  在给尚未初始化的表或数组赋值时出现
cursor_already_open 在用户试图打开已经打开的游标时出现
dup_val_on_index    在用户试图将重复的值存在使用唯一索引的数据库列中时出现
invalid_cursor      在执行非法游标运算(如打开一个尚未打开的游标)时出现
invalid_number      在将字符串转换为数字时出现
login_denied        在输入的用户名或密码无效时出现
no_data_found       在表中不存在的请求的行时出现,此外,当程序引用已经删除的元素时
storage_error       在内存损坏或PL/SQL耗尽内存时出现
too_many_rows       在执行SELECT INTO语句后返回多行时出现
value_error         在产生大小限制错误时出现
zero_divide         以零作除数时出现
others              所有异常

-在PLSQL块中,如果不使用错误捕获,可以直接使用
raise_application_error(-20001,'工资太低');
--错误处理,-20001/*-20000到20999*/, '未指定项费率'/*2048字节*/,在语句执行部分使用,如果不是自定义错误的抛出,则不能与EXCEPTION一起使用

--如果要打印出所有错误信息:
dbms_output.put_LINE(SQLCODE||SQLERRM);
--SQLCODE错误编号
--SQLERRM错误信息

declare
  --预定义错误(返回多行)
  s_al number;
begin
  select sal into s_al from emp;
exception
  when too_many_rows then
    dbms_output.put_line('返回多行');
end;

declare
  --记录没找到
  s_al number;
begin
  select sal into s_al from emp where empno = 1;
exception
  when no_data_found then
    dbms_output.put_line('记录没找到');
end;

declare
  --自定义错误
  s_al number;
  err exception;
begin
  select sal into s_al from emp where empno = 7369;
  if s_al < 3000 then
    dbms_output.put_line(s_al);
    raise err;
  else
    dbms_output.put_line(s_al);
  end if;
exception
  when err then
    dbms_output.put_line('工资太低');
end;

--引发应用程序错误
declare
  s_al number;
  err exception; --定义错误
begin
  select sal into s_al from emp where empno = 7369;
  if s_al < 3000 then
    dbms_output.put_line(s_al);
    raise err; --抛出错误
  else
    dbms_output.put_line(s_al);
  end if;
exception
  --错误捕获
  when err then
    raise_application_error(-20001, '工资太低'); --错误处理,-20001/*-20000到20999*/, '未指定项费率'/*2048字节*/
end;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值