调用存储过程会导致SOA 10g和SOA 12c中出现不同的结果

我正在将一个BPEL流程从SOA 10g移植到SOA 12c .

我配置了一个DBAdapter来调用相同的存储过程,具有相同的输入有效负载 .

问题是在SOA 10g上一切都很好,并且过程作为自定义输出返回错误代码0和"OK"作为消息 . 相反,在SOA 12c中,过程在某个时刻中断并返回错误代码-1722和"Invalid number"作为消息(这肯定是对ORA-01722数据库错误的内部处理) . 我无法调试存储过程以查看它中断的行 .

我的问题是:“低级别”参数会对此产生什么影响?这是我到目前为止所提出的想法清单以及我已经完成的检查:

  • 安装SOA的数据库使用与AL32UTF8不同的编码,这是推荐的编码 . 我不知道这可能是一个问题,但我想不是因为两个SOA版本都使用相同的数据库 .

  • 在所有相关字段的两种情况下,输入有效负载都相同 . 我通过从企业管理器下载XML并与Meld进行比较来检查;至少从这一点来看,我没有注意到任何差异 .

我想在某些时候,编码中存在一个问题,即从WebLogic向数据库发送奇数数据 . 我刚刚启用了所使用的DbAdapter特定连接池的日志,我会在获得一些后立即用相关信息更新问题(我必须等待实例启动,我自己无法启动它们) .

回答(1)

2 years ago

我猜这是一个NLS问题(根据我的经验,大多数ORA-01722都与NLS有关) .

你应该检查的事情:

  • 您是否在两个Oracle实例上使用相同的NLS设置?

  • 您是否在两个客户端/ DBAdapter上使用相同的NLS设置?

  • 你的输入中是否有浮点数(例如"12.1" - 这将很乐意用英语NLS设置解析,但如果你使用德语设置则会提出ORA-01722)