([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错

开发项目时,遇到一个错误:"[Oracle][ODBC]Numeric value out of range."

经查,应该是数据值超过字段的定义长,但是检查了良久,仍然没有发现超长的数据.

 

最后,终于发现有个这样的问题,不知是否为Oracle适配器的一个BUG.

目标为Oracle数据库,采用Oracle适配器进行数据交换,如果目标表中有date类型的字段,而对该字段未赋值,则会出现问题.
报错:"[Oracle][ODBC]Numeric value out of range."

测试如下:

1.Oracle数据库中建表:

ID为varchar2(10)类型,data1 为date类型.

2.建流程项目:

源架构:

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第1张图片

目标架构(即刚建好的表架构):

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第2张图片

转换关系,DATA1不赋值:

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第3张图片

 

流程逻辑比较简单:

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第4张图片

3.测试结果:

端口冻结,流程挂起:

 

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第5张图片

报错为:

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第6张图片

 

Code

 

 

 

可以看到,消息中没有出现data1字段的对应值.

 4. 更改映射

 

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第7张图片 

如果name的值非正确的date类型时,报错:

 

Code

 

如果name为空或者为正确的date类型,则能正常插入.

 

5.结论

用Biztalk做Oracle项目时,目标为Oracle数据库,采用Oracle适配器进行数据交换,如果目标表中有date类型的字段,而对该字段未赋值,则会出现问题,并且该问题的迷惑性很大,常让人往字段超长方面去解决问题,结果往往误入歧途,死的很惨.


报错:"[Oracle][ODBC]Numeric value out of range.",不一定是真正的超长错误.
所以遇到该问题时,多分析.需要手动添加赋值,以免流程挂起.

 

 

-----------------------------分割线--------------------------


 

([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错_第8张图片 

你可能感兴趣的:(oracle)