【问题标题】:Catching PL/SQL errors in JDBC在 JDBC 中捕获 PL/SQL 错误
【发布时间】:2013-02-23 17:58:36
【问题描述】:

我正在创建一个 Java 应用程序,它通过 JDBC 连接到 Oracle 数据库,并且能够在其中执行脚本。有点像蟾蜍。 我创建它的原因是因为我们不能在封闭的工作空间中使用 Toad 或 SQLplus。

在我谈到程序、函数、触发器、包……(要说的最重要的项目)之前,一切都很好。

我可以通过 JDBC 驱动程序发送它们,但它总是说它是成功的,即使它不是。 在 SQLplus 中,您会收到一条消息“.... 创建时出现编译错误”,因此实际上它也不是真正的错误。但是你可以显示错误。

有没有办法通过 JDBC 访问 show errors 遇到的错误?所以我至少现在发生了错误。

【问题讨论】:

  • 您检查过Statement.getWarnings()Connection.getWarnings() 的警告吗?
  • @MarkRotteveel 我刚刚做了,现在我得到:'警告:执行完成但有警告'但我仍然没有得到实际错误。
  • 遵循 Javadoc 中的说明:您需要使用 SQLException.getNextException() 或使用 iterator 来“遍历”异常
  • 使用一种基于 JDBC 的开源 SQL 工具而不是重新发明轮子怎么样?如果“封闭的工作空间”是因为对工具的担忧,您可以检查它们的源代码以确保一切都符合您的环境
  • 这是一个很棒的评论,对我很有帮助。我发现 Flyway 已经解决了同样的问题,并且能够实施类似的解决方案。

标签: java oracle jdbc plsql oracle11g


【解决方案1】:

可以使用系统视图ALL_ERRORS

例子:

select * 
from ALL_ERRORS  
where owner = 'your_schema' 
and name = 'your_package_name' 
and type = 'PACKAGE BODY' 
order by sequence

【讨论】:

  • 这成功了,谢谢!你不知道我怎么能找到最后一个改变的对象?
  • @Sonaryr - 可能,select * from all_objects where owner = 'your_schema' AND object_type in ('PACKAGE', 'PACKAGE BODY') order by last_ddl_time desc
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
相关资源
最近更新 更多