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

Java Oracle触发器失败的原因可能是什么?,java,oracle,triggers,ora-04088,Java,Oracle,Triggers,Ora 04088,首先,让我简单地解释一下我的应用程序是如何工作的: 该应用程序处理交易,这些交易作为XML文档存储在我们的数据库Oracle11g中。包含这些信息的表格定义如下: table T_MYDEALS ( DEAL_ID number(9, 0) not null, DEAL_XML xmltype ) 当我们更新或插入此表中的新项时,我们有一个触发器,它将使用XPath读取此XML,并填充其他一些元数据表 除了在我的机器上,一切都很好 现在问题来了 当我在我的机器上运行应用程序时,

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

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

table T_MYDEALS (
    DEAL_ID number(9, 0) not null,
    DEAL_XML xmltype
)
当我们更新或插入此表中的新项时,我们有一个触发器,它将使用XPath读取此XML,并填充其他一些元数据表

除了在我的机器上,一切都很好

现在问题来了

当我在我的机器上运行应用程序时,即在我的Eclipse中运行Tomcat,但连接到同源数据库,触发器失败,出现以下错误:

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'
对不起,出于安全考虑,我不能把扳机放在这里。请注意,第628行位于触发代码的末尾

我的测试

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

首先,我检查了源代码,然后检查了数据库连接,但一切似乎都是正确的。 我还切换到调试模式,查看发送到DB的XML,或者至少查看HibernateXMLType,它是org.hibernate.usertype.usertype的扩展,用于将XML转换为Oracle可读的数据。但这里也没有发现任何错误

我为您保存了许多在我这方面所做的测试,但我最近的一个测试是获得一个新的Tomcat服务器,并部署一个WAR,该WAR部署在ex.的环境认证中。。 然后,我执行了相同的测试,但触发器仍然失败

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

源代码,因为我还测试了WAR中的应用程序,该应用程序部署在一个环境中,并且工作正常; 数据库本身,因为我连接到与工作环境相同的数据库。我还尝试了另一个DB,结果是一样的。 用于我的测试的数据,因为如果我尝试保存相同的交易,但使用的是认证环境,它是有效的。 JDK,因为我也将JDK换成了新的; Eclipse,因为我最近的测试是在Eclipse之外完成的; Tomcat服务器,因为我还尝试了一个新的Tomcat。 我想知道的是,我的Windows XP环境是否有一些特定的编码配置,可以转换XML中的一些数据并使它们

我的问题

我在测试中可能忘记了哪些元素? 如果可能的话,有没有一种方法可以准确地知道Oracle触发器处理的XML,而无需在Oracle实例上安装任何东西,因为我对它没有任何控制权? 我知道我提供的信息不多,但如果你能给我一些提示或想法,我将非常感激

问候


技术信息:Java1.6、Oracle11g、Tomcat5.5.23、JSF1.2、Hibernate3.3是否可以本地化?例如,在您的系统上,您正在用1,5而不是1.5填充xml。Hibernate报告的错误显然指向这个方向。您可以禁用触发器并查看该表中的结果xmltype。如果您或您的同事可以通过类似SQL开发人员的客户端访问数据库,您可以尝试手动运行触发器中的代码


有关遇到ORA-01722时的信息和可能的操作,请参阅。

可能是本地化吗?例如,在您的系统上,您正在用1,5而不是1.5填充xml。Hibernate报告的错误显然指向这个方向。您可以禁用触发器并查看该表中的结果xmltype。如果您或您的同事可以通过类似SQL开发人员的客户端访问数据库,您可以尝试手动运行触发器中的代码


有关遇到ORA-01722时的信息和可能的操作,请参阅。

非常抱歉,我无法对您的答案进行十次投票。这正是问题所在。我在Windows控制面板中的区域和语言选项设置为法语,而不是英语。因此,数字的格式是1,5,而不是1.5。更改Windows设置解决了我的问题。1000倍谢谢!!!你说投票是什么意思?那有什么用?我们不都是来帮忙的吗你很幸运,这个比利时的小开发人员在这里看到了你的消息;我们是在地区和语言问题中长大的:-我真的很抱歉,我不能对你的答案投十次赞成票。这正是问题所在。我在Windows控制面板中的区域和语言选项设置为法语,而不是英语。因此,数字的格式是1,5,而不是1.5。更改Windows设置解决了我的问题。1000倍谢谢!!!你说投票是什么意思?那有什么用?我们不都是来帮忙的吗你很幸运,这个比利时的小开发人员在这里看到了你的消息;我们的成长伴随着地区和语言问题:-D