- 浏览: 469464 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
文章分类:数据库 关键字: oracle
一 ORACLE EXCEPTION只包含三种异常:
1.System Error,例如:Out of memory---由Oracle定义并由PL/SQL Runtime引擎在检测到错误所 产生的异常,包含在STANDARD PACKAGE中。
2.用户行为导致的Error(重点介绍)
3.应用程序给出的Warning.
二 捕获异常的机制:
用一种异常句柄来捕捉和响应错误。异常句柄提供了一种类似事件驱动的模式,也就是说,不管在何时何地发生错误,都能被同一代码捕获到。
无论在系统或程序中,一旦出现错误时,可执行程序被中断,都会将控制权交与异常处理代码,异常处理代码处理完成后,控制权会回到外围模块的代码中。例如;
如果在insert出现Exception时,第三行将不再之行,而是直接进入到第五行,执行完后,会回到调用此Procedure的外围方法上。
三 用户定义的异常:
1.自定义异常:
当我们在实际应用中总会碰到一些异常是无法在系统中预先被定义的,需要手动去捕获,同时抛出来,告诉使用系统的终端用户具体的错误信息。在PL/SQL中,用Raise手动产生。例如:
2 为非定义异常关联一个名字:
一般可以用RAISE_APPLICATION_ERROR来定义一个包含ERROR_CODE和描述的异常。
首先,需要用到PRAGMA EXCEPTION_INIT(EXCEPTION, INTEGER),这样就把非预定义异常 同Error_Code相关联起来了。Notes:ERROR_Code只能从-20000~-20999中取值,并且因为EXCEPTION_INIT是编译时运行的函数,所以必须放在PACKAGE里的声明部分。例如:
INVALID_POLICY_NO EXCEPTION;
PRAGMA EXCEPTION_INIT(INVALID_POLICY_NO, -20011);
四 自定义异常的触发:
对于自定义的异常,SQLCODE = 1.通常抛出异常,都通过RAISE.而Raise有以下三种形式:
◎ RAISE EXCEPTION
◎ RAISE PACKAGE.EXCEPTION
◎ RAISE
PL/SQL使用RAISE_APPLICATION_ERROR过程来生成一个具体描述的异常。例如:
在Handle Exception的时候,一般会做数据回滚(ROLLBACK),这里涉及到SAVEPOINT的问题,会对在同一事务里所有的DML操作进行还原。
五 异常的确定和分析:
PL/SQL提供了一些内置的函数进行分析处理。
1.SQLCODE:
当没有异常产生时候,SQLCODE=0,反之为1.
2 SQLERRM:
SQLERRM---接受返回值,通常长度不超过512B.如果超过时,需要使用DBMS_UTILITY.FORMAT_ERROR_STACK.但在实际应用中,一般都会对其进行重新包装的。
3.DBMS_UTILITY.FORMAT_ERROR_STACK。
举个实例:
1.System Error,例如:Out of memory---由Oracle定义并由PL/SQL Runtime引擎在检测到错误所 产生的异常,包含在STANDARD PACKAGE中。
2.用户行为导致的Error(重点介绍)
3.应用程序给出的Warning.
二 捕获异常的机制:
用一种异常句柄来捕捉和响应错误。异常句柄提供了一种类似事件驱动的模式,也就是说,不管在何时何地发生错误,都能被同一代码捕获到。
无论在系统或程序中,一旦出现错误时,可执行程序被中断,都会将控制权交与异常处理代码,异常处理代码处理完成后,控制权会回到外围模块的代码中。例如;
- BEGIN
- INSERT INTO A VALUES A_ROWTYPE;
- V_SUCC_FLG := '1';
- EXCEPTION
- WHEN OTHERS THEN
- V_SQL_ERR_MSG := SQLERR;
- END;
BEGIN INSERT INTO A VALUES A_ROWTYPE; V_SUCC_FLG := '1'; EXCEPTION WHEN OTHERS THEN V_SQL_ERR_MSG := SQLERR; END;
如果在insert出现Exception时,第三行将不再之行,而是直接进入到第五行,执行完后,会回到调用此Procedure的外围方法上。
三 用户定义的异常:
1.自定义异常:
当我们在实际应用中总会碰到一些异常是无法在系统中预先被定义的,需要手动去捕获,同时抛出来,告诉使用系统的终端用户具体的错误信息。在PL/SQL中,用Raise手动产生。例如:
- PROCEDURE P_CALCU_POL_PREM(I_POL_ID IN VARCHAR2)AS
- INVALID_POLICY_NO EXCEPTION;
- INVALID_PRODUCT_NO EXCEPTION;
- BEGIN
- BEGIN
- SELECT CM.POL_NO INTO V_POL_NO FROM T_CONTR_MST CM WHERE CM.POL_ID := I_POL_ID;
- SELECT CP.PRD_NO INTO V_PRD_NO FROM T_CONTR_PRD CP WHERE CP.POL_ID := I_POL_ID;
- EXCEPTION
- WHEN INVALID_POLICY_NO THEN
- RAISE;
- WHEN INVALID_PRODUCT_NO THEN
- RAISE;
- END;
- END P_CALCU_POL_PREM;
PROCEDURE P_CALCU_POL_PREM(I_POL_ID IN VARCHAR2)AS INVALID_POLICY_NO EXCEPTION; INVALID_PRODUCT_NO EXCEPTION; BEGIN BEGIN SELECT CM.POL_NO INTO V_POL_NO FROM T_CONTR_MST CM WHERE CM.POL_ID := I_POL_ID; SELECT CP.PRD_NO INTO V_PRD_NO FROM T_CONTR_PRD CP WHERE CP.POL_ID := I_POL_ID; EXCEPTION WHEN INVALID_POLICY_NO THEN RAISE; WHEN INVALID_PRODUCT_NO THEN RAISE; END; END P_CALCU_POL_PREM;
2 为非定义异常关联一个名字:
一般可以用RAISE_APPLICATION_ERROR来定义一个包含ERROR_CODE和描述的异常。
首先,需要用到PRAGMA EXCEPTION_INIT(EXCEPTION, INTEGER),这样就把非预定义异常 同Error_Code相关联起来了。Notes:ERROR_Code只能从-20000~-20999中取值,并且因为EXCEPTION_INIT是编译时运行的函数,所以必须放在PACKAGE里的声明部分。例如:
INVALID_POLICY_NO EXCEPTION;
PRAGMA EXCEPTION_INIT(INVALID_POLICY_NO, -20011);
四 自定义异常的触发:
对于自定义的异常,SQLCODE = 1.通常抛出异常,都通过RAISE.而Raise有以下三种形式:
◎ RAISE EXCEPTION
◎ RAISE PACKAGE.EXCEPTION
◎ RAISE
PL/SQL使用RAISE_APPLICATION_ERROR过程来生成一个具体描述的异常。例如:
- PROCEDURE P_CALCU_POL_PREM(I_POL_ID IN VARCHAR2)AS
- INVALID_POLICY_NO EXCEPTION;
- INVALID_PRODUCT_NO EXCEPTION;
- BEGIN
- BEGIN
- SELECT CM.POL_NO INTO V_POL_NO FROM T_CONTR_MST CM WHERE CM.POL_ID := I_POL_ID;
- SELECT CP.PRD_NO INTO V_PRD_NO FROM T_CONTR_PRD CP WHERE CP.POL_ID := I_POL_ID;
- EXCEPTION
- WHEN INVALID_POLICY_NO THEN
- RAISE_APPLICATION_ERROR(ERROR_CODE,ERROR_MSG) ;
- WHEN INVALID_PRODUCT_NO THEN
- RAISE ....;
- END;
- END P_CALCU_POL_PREM;
PROCEDURE P_CALCU_POL_PREM(I_POL_ID IN VARCHAR2)AS INVALID_POLICY_NO EXCEPTION; INVALID_PRODUCT_NO EXCEPTION; BEGIN BEGIN SELECT CM.POL_NO INTO V_POL_NO FROM T_CONTR_MST CM WHERE CM.POL_ID := I_POL_ID; SELECT CP.PRD_NO INTO V_PRD_NO FROM T_CONTR_PRD CP WHERE CP.POL_ID := I_POL_ID; EXCEPTION WHEN INVALID_POLICY_NO THEN RAISE_APPLICATION_ERROR(ERROR_CODE,ERROR_MSG) ; WHEN INVALID_PRODUCT_NO THEN RAISE ....; END; END P_CALCU_POL_PREM;
在Handle Exception的时候,一般会做数据回滚(ROLLBACK),这里涉及到SAVEPOINT的问题,会对在同一事务里所有的DML操作进行还原。
五 异常的确定和分析:
PL/SQL提供了一些内置的函数进行分析处理。
1.SQLCODE:
当没有异常产生时候,SQLCODE=0,反之为1.
2 SQLERRM:
SQLERRM---接受返回值,通常长度不超过512B.如果超过时,需要使用DBMS_UTILITY.FORMAT_ERROR_STACK.但在实际应用中,一般都会对其进行重新包装的。
3.DBMS_UTILITY.FORMAT_ERROR_STACK。
举个实例:
- UNKNOWN_ERR_CODE EXCEPTION;
- PRAGMA EXCEPTION_INIT(UNKNOWN_ERR_CODE, -20099);
- PROCEDURE P_HANDLE_EXCEPTION(I_ERR_CODE IN NUMBER)AS
- BEGIN
- SELECT SR.MSG_DES INTO V_MSG_DES
- FROM T_STRING_RESOURCE SR WHERE SR.MSG_ID = I_ERR_CODE;
- IF V_MSG_DES IS NOT NULL THEN
- IF (I_ERR_CODE = 20091) THEN
- RAISE_APPLICATION_ERROR(I_ERR_CODE,V_MSG_DES);
- ELSIF (I_ERR_CODE = 20092) THEN
- RAISE_APPLICATION_ERROR(I_ERROR_CODE,V_MSG_DES||'I_ERR_CODE')
- END IF;
- ELSE
- RAISE_APPLICATION_ERROR(UNKNOWN_ERR_CODE);
- END IF;
- END P_HANDLE_EXCEPTION;
- PROCEDURE P_CALCU_PRD_PREM(I_POL_ID IN VARCHAR2)AS
- V_PROD_PREM NUMBER(10,2);
- V_PRD_INSURE_NUM NUMBER;
- BEGIN
- BEGIN
- SELECT CP.PRD_PREM,CP.PRD_INSURE_NUM INTO V_PROD_PREM,V_PRD_INSURE_NUM FROM T_CONTR_PROD CP WHERE CP.POL_ID = I_POL_ID;
- V_PRD_AVG_PREM := V_PROD_PREM / V_PRD_INSURE_NUM;
- EXCEPTION
- P_HANDLE_EXCEPTION(SQLERRM);
- END;
- END P_CALCU_PRD_PREM;
发表评论
-
navicat快捷键
2013-01-05 09:47 13891.ctrl+q 打开查询窗口2.ctrl ... -
mysql分表方案
2012-09-05 22:29 9105一、 概述分表是个目前算是比较炒的比较流行的概念,特别是在 ... -
mysql扩展至分库分表
2012-09-05 21:47 4046MySQL互联网Oracle企业应 ... -
批量修改SEQUENCE,序列同时增加10000
2012-06-26 16:40 1637select 'alter sequence ' || t1. ... -
oracle执行计划
2011-08-23 14:13 1179本文全面详细介绍oracle执行计划的相关的概念,访问数据 ... -
Oracle分页,Oracle中rownum与rowid的理解
2011-08-15 21:33 1880一、 oracle ... -
oracle--如何分析执行计划
2011-08-15 21:31 4258例1: 假设LARGE_TABLE ... -
Oracle优化----索引原理篇
2011-08-15 21:22 9992006-04-04 15:09 1561人阅读 评论(0) ... -
ORACLE执行计划
2011-06-22 17:27 15121 ,什么是执行计划 所谓执行计划,顾名思义,就是对一 ... -
MYSQL 字符
2011-04-23 00:05 1038因为不知道什么时候 ... -
ORACLE用户管理
2011-04-22 14:40 1397这里将介绍Oracle修改用户权限的实现过程,包括一些权限管 ... -
数据库表设计细节
2011-04-11 22:48 1965数据库建表原则 数据 ... -
数据库设计的14个技巧
2011-04-11 22:19 10041. 原始单据与实体之间的关系 可以是一对一、一对多、多对 ... -
ORACLE xmltype 遍历
2011-03-14 16:05 1994DECLARE var XMLType; ... -
Oracle存储过程解析XML,并把数据持久化
2011-03-14 14:52 1907需要解析的xml文件:people.xml 1 < ... -
oracle对大对象类型操作:blob,clob,nclob,bfile
2011-03-14 14:49 18513-4 Lob类型 ... -
impdp expdp使用小结
2011-03-11 17:29 2315\ 最近我们迁移数据库,其中涉及到了数据迁移 sql ... -
oracle表空间限额不足问题解决
2011-03-11 16:37 1300web程序访问数据库是,总是报 表空间“hnsd”限额不 ... -
ORACLE JOB
2011-03-11 15:56 1179、设置初始化参数 job_qu ... -
利用oracle快照dblink解决数据库表同步问题
2011-03-11 13:55 1410本实例已完全通过测试, ...
相关推荐
根据提供的文件信息,我们可以归纳出以下Oracle存储过程的相关知识点: ### Oracle存储过程基础概念 ...以上是基于提供的部分内容对Oracle存储过程进行的总结,包含了从基础概念到具体应用实例的全面解析。
### Oracle变量的总结 在Oracle数据库管理中,变量的使用是一项基本且重要的技能。通过合理的变量定义与使用,可以极大提升SQL脚本的灵活性与可维护性。本文将围绕Oracle中的变量定义、类型以及如何在实际操作中...
catch (OracleException ex) { Console.WriteLine("Exception occurred!"); Console.WriteLine("The exception message is: {0}", ex.Message); } finally { Console.WriteLine("------------------ End ---...
catch (System.Data.OracleClient.OracleException ex) { connection.Close(); throw new Exception(ex.Message); } return ds; } } ``` 此方法接受一个SQL查询语句作为输入,并返回一个填充了查询结果的`...
- 异常处理:理解WHENEVER SQLERROR、BEGIN...EXCEPTION...END结构。 8. **数据库性能监控**: - 使用V$视图来监控数据库性能,如V$SESSION、V$PGA Aggregate Target等。 - AWR(Automatic Workload Repository...
#### 总结 通过上述步骤,我们解决了PLSQL Developer无法连接64位Oracle的问题。尽管官方尚未提供对64位Oracle的支持,但通过上述变通方案,仍然可以让开发人员高效地利用PLSQL Developer这款强大的工具。希望本文...
Oracle总结 Oracle是一种关系型数据库管理系统,广泛应用于各种行业。下面是 Oracle 中的一些重要知识点总结: 1. 在 Oracle 中关于 CLOB 类型数据的插入: Oracle 中的 CLOB(Character Large OBject)类型是...
处理这类异常需要先定义异常,然后通过`EXCEPTION_INIT`伪过程将异常与特定的Oracle错误代码关联起来。例如,处理ORA-02291(外键约束违反)异常: ```sql DECLARE e_constraint_violation EXCEPTION; PRAGMA ...
#### 五、总结 本文详细介绍了Oracle自定义函数的定义方法、常见用途及一些高级特性。通过这些自定义函数,我们可以更好地管理和优化数据库中的数据处理逻辑。掌握这些技术对于提高开发效率、减少重复工作量具有...
总结起来,通过C#和`Oracle.ManagedDataAccess.dll`,开发者可以在本地无Oracle客户端的环境下,轻松实现对Oracle数据库的连接和操作。这为开发人员提供了极大的便利,减少了对硬件资源的依赖,同时也简化了部署流程...
PL/SQL是Oracle的编程语言,包含流程控制结构,如IF-THEN-ELSIF-ELSE、CASE、WHILE和FOR循环,以及异常处理(BEGIN-EXCEPTION-END)。这些控制结构使得在数据库中编写复杂的业务逻辑成为可能。 通过深入理解和实践...
} } catch (SQLException ex1) { } } }}```总结与注意事项调用Oracle存储过程在Java中主要使用`CallableStatement`,通过占位符`?`来代表参数,并使用`setXXX`方法设置IN参数,`registerOutParameter`注册OUT或IN...
- **异常处理**:学习如何使用EXCEPTION块来捕获并处理错误。 - **游标**:掌握游标的使用技巧,提高数据处理效率。 ##### 3.4 Oracle基本管理 - **用户和权限管理**:创建用户账户,分配适当的权限。 - **角色...
Linux安装Oracle图形化界面时经常会遇到各种问题,本文将总结这些问题的解决方法。 一、错误描述:xlib connection to ":0.0" refused by server 解决方案:此错误是由于用户身份问题引起的,可以通过切换到root...
5. OracleException:表示在处理Oracle数据库时出现的错误或异常。 二、OracleClient的使用步骤 1. 创建连接:使用OracleConnection类的构造函数,指定连接字符串来创建数据库连接。连接字符串通常包括服务器名称...
} catch (OracleException ex) { Console.WriteLine("Exception occurred!"); Console.WriteLine("The exception message is: {0}", ex.Message.ToString()); } finally { Console.WriteLine("------------------...
以下是对Oracle常用应用操作的详细总结: 1. **变量赋值与判断语句**: - 在Oracle SQL中,给变量赋值时不能使用等号(=),而是使用冒号等于(:=)操作符。例如:`variable_name := value;` - Oracle的条件判断...
### 总结 通过上述示例可以看出,在Oracle中创建和调用存储过程是非常灵活且强大的。存储过程不仅可以接收和返回各种类型的数据,还可以使用复杂的逻辑处理,如游标等高级特性,极大地提高了应用程序的性能和维护性...
- [Oracle官方文档 - PL/SQL异常处理](https://docs.oracle.com/en/database/oracle/oracle-database/19/plsls/PL-SQL-exception-handling.html) - [Oracle PL/SQL教程 - 异常处理]...
Oracle 异常处理是PL/SQL编程中的关键组成部分,它允许开发者优雅地处理程序执行过程中可能出现的错误,确保系统的稳定性和可靠性。异常处理是通过异常情况(EXCEPTION)和异常处理器(EXCEPTION HANDLER)来实现的...