Oracle触发器失败的原因是什么?

Rom*_*las 1 java oracle triggers ora-04088

首先,让我简要解释一下我的应用程序是如何工作的:

该应用程序处理交易,这些交易作为XML文档存储在我们的数据库(Oracle 11g)中.包含这些信息的表定义如下:

table T_MYDEALS (
    DEAL_ID number(9, 0) not null,
    DEAL_XML xmltype
)
Run Code Online (Sandbox Code Playgroud)

当我们在此表中更新或插入新项时,我们有一个触发器,它将读取(使用XPath)此XML,并填充其他元数据表.

一切正常,除了在我的机器上.

现在问题

当我在我的机器上运行应用程序时(即Tomcat在我的Eclipse中运行,但连接到Homologation DB),触发器失败并出现以下错误:

WARN  [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1722, SQLState: 42000
ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01722: invalid number
ORA-06512: at "MY_SCHEMA.AFTER_R_INSERT_MYDEAL", line 628
ORA-04088: error during execution of trigger 'MY_SCHEMA.AFTER_R_INSERT_MYDEAL'
Run Code Online (Sandbox Code Playgroud)

对不起,出于安全考虑,我不能把我的触发器放在这里.请注意,线628位于触发代码的末尾.

我的测试

所以我试着理解为什么这个错误发生在我的机器上(因为它只发生在我的机器上,我的同事都没有遇到这个问题).我不能说它什么时候开始停止工作,也许我最近更换了电脑?

首先,我检查源代码,然后检查我的数据库连接,但一切看起来都是正确的.我还调试了调试模式,看看发送给数据库的XML,或者至少在我们的HibernateXMLType(org.hibernate.usertype.UserType我的XML的转换,用于将我们的XML转换为Oracle可读的数据).但这里既没有发现任何错误.

我省了很多测试,但我最近的一项测试是获得一台新的Tomcat服务器,并部署一个部署在环境中的WAR(例如Homologation).然后,我执行了相同的测试,但触发器仍然失败.

到目前为止,我已经消除了以下嫌犯:

  • 源代码,如我还测试从被部署在环境和工作正常一WAR的应用;
  • DB本身,因为我连接到同一数据库的工作环境.我也试过用另一个DB,结果是一样的.
  • 用于我的测试的数据,如果我尝试保存相同的交易,但使用Homologation环境,它的工作原理.
  • JDK,因为我也改变了JDK的新版本;
  • Eclipse,因为我最近的测试是在Eclipse之外完成的;
  • Tomcat服务器,因为我也试过一个新的Tomcat.

我想知道的是,如果我的Windows XP环境有一些特定的编码配置,它会"转换"XML中的一些数据并制作它们

我的问题

  • 在测试中我可能忘记了哪些可能的元素?
  • 有没有办法确切知道Oracle触发器处理的XML(如果可能的话,不在Oracle实例上安装任何东西,因为我对它没有任何控制权)?

我知道我没有提供很多信息,但如果你能给我一些提示或想法,我将非常感激!

问候.


技术信息: Java 1.6,Oracle 11g,Tomcat 5.5.23,JSF 1.2,Hibernate 3.3

Wiv*_*ani 5

可能是本地化?在您的系统上,您将使用"1,5"而不是"1.5"填充xml.Hibernate报告的错误明确指向了这个方向.您可以禁用触发器并查看该表中生成的xmltype的内容.如果您或您的某个同事可以通过SQL Developer(如客户端)访问数据库,您可以尝试在"手动"触发器中运行代码.

有关ORA-01722的信息和可能的操作,请参见此处.

  • 你是什​​么意思upvote?这有什么用?我们不是都只是为了帮忙吗?;-)你很幸运这位小比利时开发者在这里看到了你的信息; 我们在区域和语言问题上成长:-D (2认同)