当前位置: 代码迷 >> SQL >> PLSQL 错误处理
  详细解决方案

PLSQL 错误处理

热度:381   发布时间:2016-05-05 14:19:29.0
PLSQL 异常处理
1. 异常块

?

BEGIN《PL/SQL块》;Exceptionwhen no_data_found then --没有找到数据《响应命令》;when too_many_rows then --返回多行,隐式光标每次只能检索一行数据《响应命令》;when invalid_number then --字符向数字转换失败《响应命令》;when zero_divide then --被零除《响应命令》;when dup_val_on_index then --向唯一索引中插入重复数据《响应命令》;when invalid_cursor then --非法游标操作《响应命令》;when value_error then --数字的,数据转换,截字符串或强制性的错误《响应命令》;when others then --发生其它任何错误null; --选择一:什么也不做,就当错误没发生raise form_trigger_failure; --选择二:挂起当前程序END;

?

2.常用预定义例外

EXCEPTIONWHEN CURSOR_ALREADY_OPEN THEN -- ORA-06511 SQLCODE = -6511 游标已经打开..WHEN DUP_VAL_ON_INDEX THEN -- ORA-00001 SQLCODE = -1 向唯一索引中插入重复数据..WHEN INVALID_CURSOR THEN -- ORA-01001 SQLCODE = -1001 非法游标操作..WHEN INVALID_NUMBER THEN -- ORA-01722 SQLCODE = -1722 字符向数字转换失败..WHEN LOGIN_DENIED THEN -- ORA-01017 SQLCODE = -1017..WHEN NO_DATA_FOUND THEN -- ORA-01403 SQLCODE = +100 没有找到数据..WHEN NOT_LOGGED_ON THEN -- ORA-01012 SQLCODE = -1012..WHEN PROGRAM_ERROR THEN -- ORA-06501 SQLCODE = -6501 程序错误..WHEN STORAGE_ERROR THEN -- ORA-06500 SQLCODE = -6500..WHEN TIMEOUT_ON_RESOURCE THEN -- ORA-00051 SQLCODE = -51..WHEN TOO_MANY_ROWS THEN -- ORA-01422 SQLCODE = -1422 返回多行..WHEN TRANSACTION_BACKED_OUT THEN -- ORA-00061 SQLCODE = -61..WHEN VALUE_ERROR THEN -- ORA-06502 SQLCODE = -6502 数值转换错误..WHEN ZERO_DIVIDE THEN -- ORA-01476 SQLCODE = -1476 被零除..WHEN OTHERS THEN -- 其它任何错误的处理

?

3.获取异常信息

declarev_errcode number;v_errmsg varchar2(100);...../省略commit; --当没有异常的情况下,可以提交exceptionwhen others then --在有异常的情况下,怎么样得到异常信息了?v_errcode := sqlcode;v_errmsg := substr(sqlerrm,1,100); dbms_output.put_line('error code is' || v_errcode || ' error message is' || v_errmsg)rollback;  --回滚ReturnValue := 'false'; end;

?

  相关解决方案