Oracle用户自定义异常实现过程解析_oracle

来源:脚本之家  责任编辑:小易  

当与一个异常错误相2113关的错误出5261现时,就会隐含触发该异常4102错误。用户定义的异常错误是通过显1653式使用 RAISE 语句来触发。当引发一个异常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理代码。 对于这类异常情况的处理,步骤如下:1、在PL/SQL 块的定义部分定义异常情况:<异常情况>  EXCEPTION;2、RAISE <异常情况>;3、在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。例:更新指定员工工资,增加100;DECLARE   v_empno employees.employee_id%TYPE :=&empno;   no_result  EXCEPTION;BEGIN   UPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;   IF SQL%NOTFOUND THEN      RAISE no_result;   END IF;EXCEPTION   WHEN no_result THEN       DBMS_OUTPUT.PUT_LINE('数据更新语句失败了!');   WHEN OTHERS THEN      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END;1、弹出错误框:示例代码:declarev_count number;beginselect count(*) into v_count from dept;if v_count < 10 thenraise_application_error(-20001,'数量小于10');end if;end;执行结果:2、控制台显示:示例代码:declarev_count number;my_exp exception;beginselect count(*) into v_count from dept;if v_count < 10 thenraise my_exp;end if;exceptionwhen my_exp thendbms_output.put_line('数量小于10');when others thendbms_output.put_line('其他异常');end;执行结果:PS:ORACLE 用户自定义异常小例子:   CREATE OR REPLACE PROCEDURE test_Exception_byLeejin(ParameterA IN varchar,ParameterB IN varchar,ErrorCode OUT varchar --返回值,错误编码)AS/*以下是一些变量的定义*/V NUMBER;V nvarchar();V NUMBER;APP_EXP EXCEPTION; --自定义异常BEGINErrorCode :='';IF (ParameterA=ParameterB) THENErrorCode := 'ParameterA = ParameterB';RAISE APP_EXP; -- 抛出异常END IF;EXCEPTIONWHEN APP_EXP THEN --在处理异常RAISE_APPLICATION_ERROR(-,ErrorCode);WHEN OTHERS THENRAISE_APPLICATION_ERROR(-,'未知异常');END;   ,:--设:要抛出的异2113常叫5261做ex_no_data,要判断是否小于0的变4102量为:v_data,则1653: DECLARE --声明异常 ex_no_data EXCEPTION; -- Exception to indicate an error condition v_data NUMBER; -- Variable to hold data --v_ErrorCode NUMBER; -- Variable t...本回答被提问者采纳www.zgxue.com防采集请勿采集本网。

注意:普通的查询语句不会出现异常,只有使用into对变量进行赋值的时候才会发生异常

JAVA没法子捕获到你那个异常 可以考虑你那个异常的SQLSTATE,然后通过判断SQLSTATE来作为你特定异常

--系统变量: notfound --> if sql%notfund then 如果这个表达式为真,则 (增删改)出错--,先自定义一个异常:no_result exception -- if sql%nofund then --excetpion --when no_result then --dbms……

如果用自定义异常则可以创建如下代码 Sql代码 declare row_count int; begin select count(*) into row_count from tree_table where parent_id = '0001' ; if (row_count > 0) then RAISE_APPLICATION_ERROR(-20001, '该节点有子节点,不能被删

用户自定义异常写在:declare里,如:

没办法吧,实在要捕获所有的,就每个可能引发异常的SQL语句都捕获一下,然后1次RAISE 如 insert into teachers values(11101,'王彤','教授','01-9月1990',100,v_wage,101); 改成 BEGIN insert into teachers values(11101,'王彤','教授','01-9月

set serveroutput ondeclareno_result exception; --自定义异常v_ssid student_test.sid%type;

没办法吧,实在要捕获所有的,就每个可能引发异常的SQL语句都捕获一下,然后1次RAISE 如 insert into teachers values(11101,'王彤','教授','01-9月1990',100,v_wage,101); 改成 BEGIN insert into teachers values(11101,'王彤','教授','01-9月

begin update student_test set sex='男' where sid=1000002; --没有异常,报(自定义异常)插入为空的错误 if SQL%NOTFOUND then RAISE no_result; end if;exception when no_result then dbms_output.put_line('修改有误!'); when dup_val_on_index then dbms_output.put_line('系统异常,违反主键约束');end;

方法一, 直接抛 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 !');

如果修改语句修改为空,系统不会报错,但会直接进入用户自己定义的no_result异常里,

if SQL%NOTFOUND then RAISE no_result;end if;

SQL%NOTFOUND是检查更新语句是否更新成功,如果更新失败,则notfound语句为真,

则使用raise语句跳转到no_result异常执行。

(dup_val_on_index)异常是系统异常,如果使用插入语句并且违反主键唯一性约束,则执行dup_val_on_index异常。

--设:要抛出的异常叫2113做ex_no_data,要判断是否小于52610的变量为:v_data,则:DECLARE --声明异4102常 ex_no_data EXCEPTION; -- Exception to indicate an error condition v_data NUMBER; -- Variable to hold data--v_ErrorCode NUMBER; -- Variable to hold the error message code--v_ErrorText VARCHAR2(200); -- Variable to hold the error message textBEGIN --抛出异1653常 IF v_data < 0 THEN --(括号内填抛出异常的条件) RAISE ex_no_data; END IF;--捕捉异常EXCEPTION WHEN ex_no_data THEN dbms_output.put_line(v_data); --捕捉其他异常,并获得 捕获异常的内容 WHEN OTHERS THENnull;-- v_ErrorCode := SQLCODE;-- v_ErrorText := SUBSTR(SQLERRM, 1, 200); -- 注意这里用SUBSTR 来截取错误消息--dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);END;/ ---另可参考我之前的一个帖子:http://zhidao.baidu.com/question/162989381.html内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • oracle 数据库操作技巧集
  • oracle index 的三个问题
  • windows系统安装oracle 11g 数据库图文教程
  • oracle复习笔记之pl/sql程序所要了解的知识点
  • bitmap 索引和 b-tree 索引在使用中如何选择
  • oracle正则表达式regexp_like的用法详解
  • oracle实现自定义序列号生成的方法
  • oracle case when 语句的用法详解
  • oracle 最大连接数的问题
  • oracle数据库中的控制文件管理以及常用参数设置
  • oracle 用户自定义异常
  • 如何处理用户自定义异常 oracle
  • 如何将特定的 oracle 的错误编号与用户自定义的异...
  • Oracle的自定义异常问题,急
  • Java捕获oracle抛出的自定义异常问题
  • oracle抛出自定义的异常用什么关键字
  • oracle 同时有系统异常和自定义的异常时怎么办?求解!!
  • oracle 同时有系统异常和自定义的异常时怎么办?求...
  • oracle的function怎么抛出异常
  • 关于ORACLE异常处理的问题
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页oracle用decode函数或case-when实现自定义排序使用python脚本zabbix自定义key监控oracle连接状态oracle自定义脱敏函数的代码详解oracle 自定义split 函数实例详解oracle实现自定义序列号生成的方法详解oracle自定义异常示例oracle将查询的结果放入一张自定义表中并再查询数据oracle异常(预定义异常,自定义异常)应用介绍oracle 数据库操作技巧集windows系统安装oracle 11g 数据库图文教程oracle复习笔记之pl/sql程序所要了解的知识点bitmap 索引和 b-tree 索引在使用中如何选择oracle正则表达式regexp_like的用法详解oracle实现自定义序列号生成的方法oracle case when 语句的用法详解oracle 最大连接数的问题oracle数据库中的控制文件管理以及常用参数设置oracle 查看表空间的大小及使用情linux系统(x64)安装oracle11g完oracle数据库下载及安装图文操作oracle存储过程基本语法介绍oracle 10g 安装教程[图文]oracle 如何查询被锁定表及如何解基于ora-12170 tns 连接超时解决oracle数据库tns配置方法详解oracle中to_date详细用法示例(ororacle 创建表空间详细介绍oraclepl/sql单行函数和组函数详解oracle轻松取得建表和索引的ddl语句oracle 12c实现手工建库而非cdb及cdb创建sql – oracle中匿名table/varray类型示例oracle常见错误代码的分析与解决(一)解析如何查看oracle数据库中某张表的字段oracle数据库数据丢失恢复的几种方法总结linux oracle数据库删除操作指南在linux下安装oracleoracle 数据库连接查询sql语句
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved