阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SQL Server访问Oracle提示[消息 9803 数据不适用于类型 “numeric”]问题

147次阅读
没有评论

共计 1135 个字符,预计需要花费 3 分钟才能阅读完成。

服务器 A, 安装的是 SQL Server2005,Oracle 10g 的客户端, 版本 10.2.0.1
服务器 B, 装的是 Oracle 11g, 版本 11.2.0.1
现在是服务器 A 上建了链接服务器, 去访问服务器 B 上面的 Oracle 库数据
假如使用微软的驱动 Microsoft OLE DB Provider for Oracle(MSDAORA)建链接服务器,则性能不敢恭维(但语句是可以正常执行的),因为性能原因,使用 Oracle 的驱动 Oracle Provider for OLE DB(OraOLEDB.Oracle)来建链接服务器,但随之问题来了

Oracle 的 T1 表,只有一个字段 F1,number(19,4)类型

SQL Server 查询分析器中,无论使用下列哪种语法格式
select * from LINKDB..USER1.T1;
select * from openquery(LINKDB,’SELECT * FROM T1′);
都会提示
消息 9803,级别 16,状态 1,第 1 行 数据不适用于类型 “numeric”。

网上查找解决办法,没找到适合此情况的有效解决方案(查询到此错误信息,但对应的解决方法不外乎做类型转换)

按错误提示的字面意思,开始以为 F1 字段值有最大值限制,通过反复测试,发现的规律(不知道算不算规律)并不是值的大小,测试结果如下:
5.0000 可以
9.0000 可以
10.0000 不可以
20.0000 不可以
50.0000 不可以
50.1000 可以
51.0000 可以
100.0000 不可以
110.0000 可以
100.0100 可以
500.0000 不可以
1000.0000 不可以
1200.0000 不可以
1201.0000 可以

规律貌似就是,>=10 的数, 只要只有一位非零的数, 就不行,>=1000 的数, 只有一位或者前两位非零, 也是不行的
怪哉!

查了一下 SQL Server 的版本
select @@version
Microsoft SQL Server 2005 – 9.00.1399.06 (Intel X86)  Oct 14 2005 00:33:37  Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
没打 pack

所以先打上 sp4,之后仍然没解决

再考虑 Oracle 客户端版本问题,在服务器 A 上面装了 Oracle 11g 的客户端,问题解决!

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-05/131109.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1135字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中