在oracle中的存储过程中,使用的EXCEPTION并用WHEN OTHERS
THEN进行捕获,但是捕获了后就没有办法知道出错具体出在哪一行,无法更正是哪一行报出的异常,是否有好的解决方法。
------解决方法
--------------------------------------------------------
1、用PL/SQL里面选择TEST->F9(开始测试)->打断点->选择执行到下一断点处。
2、使用DBMS_OUTPUT.PUT_LINE();每个SQL后面都加一个,结束后看看打印到那个就没了,对应的那个 SQL就是出问题的地方。
我通常写存储过程都用同一个EXCEPTION
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
P_ERR_LOG(SQLERRM,'PROCEDURE_NAME',SYSDATE);
ROLLBACK;
P_ERR_LOG是个存储过程,参数按顺序为:
错误信息、出错过程名称、时间
然后把信息存入一张日志表中。
------解决方法
--------------------------------------------------------
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK);
DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_CALL_STACK);
这样就能把错误的详细信息打印出来了
------解决方法
--------------------------------------------------------
可以定义一个变量stmt_no,在每句前面为此变量赋值,如果出现exception,则stmt_no就是对应值的下一句,下面是Oracle给出的
例子:
CREATE OR REPLACE PROCEDURE loc_var AS
stmt_no NUMBER;
name VARCHAR2(100);
BEGIN
stmt_no := 1; -- designates 1st SELECT statement
SELECT table_name INTO name
FROM user_tables
WHERE table_name LIKE 'ABC%';
stmt_no := 2; -- designates 2nd SELECT statement
SELECT table_name INTO name
FROM user_tables
WHERE table_name LIKE 'XYZ%';
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
('Table name not found in query ' || stmt_no);
END;
/
CALL loc_var();
------解决方法
--------------------------------------------------------
#4的做法是客户的1997版代码标准;
还有一种是尽量把逻辑写细到一个个小的procedure,然后用一个main
procedure在包内调用,每次调用后将计数器加1,然后将该数字保存到一个专门的表中,知道最后一步成功后再将计数器置1,这样也容易知道错误位
置,再次运行时可以从错误位置直接启动,restartbility非常好。这种写法是目前客户公司的2008版的代码标准
分享到:
相关推荐
Oracle数据库中的异常管理和游标操作是PL/SQL编程的重要组成部分,它们对于编写健壮和可靠的数据库应用程序至关重要。异常处理允许程序优雅地应对错误情况,而游标则为处理单个或多个查询结果提供了灵活的方式。 ...
Oracle错误代码的范围广泛,涵盖了从连接问题到数据类型不匹配、权限问题、语法错误等各种可能的异常情况。例如,以下是一些常见的Oracle错误代码及其含义: - ORA-00001: 违反唯一性约束。这通常意味着尝试插入或...
40. 如何正确利用Rownum来限制查询所返回的行数 41. 什么是ROWID,为什么需要它 42. 手工安装数据库时需要安装那些系统包 43. 手工创建数据库的全部脚本及说明 44. 提高Oracle数据库应用系统安全的举例与分析 ...
除了标准的错误码,Oracle数据库还有一系列与特定模块或特性相关的警告和异常,如PL/SQL错误、网络连接问题、性能优化难题等。"Oracle错误码大全"都会对这些情况进行详尽的解释。 总的来说,"Oracle错误码大全"是...
7. **异常处理**:在JDBC操作中,应该始终使用try-catch-finally结构,以捕获可能出现的异常并确保资源的正确关闭。 以上就是关于“JDBC oracle 驱动程序包”的主要知识点。通过理解并正确使用JDBC驱动,Java开发者...
- 在整个过程中,应使用`try-catch`块来捕获可能出现的异常,如`OracleException`或`SqlException`,并提供适当的错误处理和用户反馈。 5. **关闭连接**: - 在操作完成后,记得关闭数据库连接:`connection....
### 使用Java连接Oracle数据库 #### 一、简介与准备工作 在进行Java程序开发时,经常需要与数据库进行交互。Oracle数据库作为业界广泛使用的数据库之一,掌握如何使用Java连接Oracle数据库是一项重要的技能。本文...
本文将深入探讨Oracle JDBC驱动的不同类型、其工作原理以及如何在项目中正确配置和使用。 Oracle JDBC驱动主要分为四种类型: 1. ** Thin驱动(Type 4)**:这是一种纯Java实现的驱动,无需中间件或本地库。它直接...
7. **异常处理**:Python的异常处理结构配合 `cx_Oracle` 的特定异常类(如 `cx_Oracle.Error`),可以帮助处理数据库操作中的错误。 8. **PL/SQL执行**:除了SQL,`cx_Oracle` 还支持执行Oracle的PL/SQL过程和函数...
- 检查 Oracle 视图或存储过程的定义,确认其是否正确地返回了预期的数据行数。 4. **其他考虑因素**: - **日志记录**:开启 SQL Server 和 Oracle 的日志记录功能,可以帮助诊断问题所在。 - **性能优化**:...
4. **异常处理**:cx_Oracle库封装了Oracle数据库的所有错误和警告,将其转化为Python的异常,方便开发者捕获和处理。 5. **游标属性**:游标对象具有多种属性,如rowcount(返回受影响的行数)、description(返回...
Oracle JDBC驱动程序是Java应用程序与Oracle数据库之间通信的桥梁,使得开发者可以利用Java语言执行SQL语句和处理数据库数据。标题中的"10g与9i"指的是Oracle数据库的两个不同版本,即Oracle Database 10g和9i。这些...
在开发C# Winform应用程序时,有时我们希望避免在用户机器上强制安装Oracle客户端来连接Oracle数据库。Oracle提供了一个名为ODAC(Oracle Data Access Components)的解决方案,它包含了一组.NET数据提供者,使得...
4. **清理资源**:在 `finally` 块中关闭数据库连接,确保即使发生异常也能正确释放资源。 ### ExecuteNonQuery 方法(针对现有事务) 此方法与前一个方法类似,但它是针对已存在的事务进行操作。这种方法常用于...
- Oracle使用`rownum`限制返回的行数,例如:`Select * from TableName where rownum ;` - DB2提供了`fetch first N rows only`来达到相同的效果,如:`Select * from TableName fetch first N rows only;` 2. **...
### 迁移MySQL数据到Oracle上的详细步骤 在企业级应用环境中,数据库迁移是一个常见的需求。随着业务的发展或系统架构的变化,将数据从一个数据库管理系统迁移到另一个数据库管理系统的需求日益增多。本文主要介绍...
Oracle数据库是一种广泛使用的大型关系型数据库管理系统(RDBMS),由甲骨文公司(Oracle Corporation)开发。它支持SQL作为其标准数据库语言,并提供了强大的数据库管理工具来帮助数据库管理员和开发人员执行各种...
对于这些异常,Oracle数据库提供了多种获取相关信息的方式,如通过SQLCODE和SQLERRM获取错误代码和错误消息,通过DBMS_UTILITY.FORMAT_ERROR_BACKTRACE和DBMS_UTILITY.FORMAT_CALL_STACK获取错误发生的行数以及执行...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能在很大程度上得益于其...在实际操作中,还需要结合具体业务需求灵活运用,并注意函数的返回类型和可能产生的异常情况,以确保SQL语句的正确性和高效性。