oracle 10g透明网关问题

qingrou123 2014-01-13 11:05:07
这两天在测透明网关同步数据的问题,本机是10g32位的,连的是64位SQL SERVER2012的库。按照资料一步步已经配通了,查询SELECT * FROM prov@dlk正常显示出结果。然后我换了1张表查,SELECT * FROM contact直接报错“ORA-00910:指定的长度对于数据类型而言过长”。现在是SELECT就出错,我都还没试INSERT呢。。下面的操作就有点奇异了:
1、于是我就只查我需要的那些列:SELECT "ContactId","new_contact_id","FullName","ParentCustomerId","JobTitle","Telephone1","MobilePhone","Fax","EMailAddress1","Department","new_mobilephone2","new_fax2","Description","GenderCode","new_qqnumber" FROM Contact@dlk;也报一样的错。

2、我在SQL SERVER上用了SELECT * INTO Contact22 FROM Contact,然后SELECT "ContactId","new_contact_id","FullName","ParentCustomerId","JobTitle","Telephone1","MobilePhone","Fax","EMailAddress1","Department","new_mobilephone2","new_fax2","Description","GenderCode","new_qqnumber" FROM Contact22@dlk也报“ORA-00910”。

3、我先DROP了Contact22,然后SELECT ContactId,new_contact_id,FullName,ParentCustomerId,JobTitle,Telephone1,MobilePhone,Fax,EMailAddress1,Department,new_mobilephone2,new_fax2,Description,GenderCode,new_qqnumber INTO Contact22 FROM Contact,这时SELECT "ContactId","new_contact_id","FullName","ParentCustomerId","JobTitle","Telephone1","MobilePhone","Fax","EMailAddress1","Department","new_mobilephone2","new_fax2","Description","GenderCode","new_qqnumber" FROM Contact22@dlk忽然就可以了。

4、我再DROP TABLE Contact22,再SELECT * INTO Contact22 FROM Contact,这时SELECT "ContactId","new_contact_id","FullName","ParentCustomerId","JobTitle","Telephone1","MobilePhone","Fax","EMailAddress1","Department","new_mobilephone2","new_fax2","Description","GenderCode","new_qqnumber" FROM Contact22@dlk也可以。

SQL SERVER上的表结构部分如下:(
ContactId uniqueidentifier,
new_contact_id nvarchar(100),
FullName nvarchar(160),
ParentCustomerId uniqueidentifier,
JobTitle nvarchar(100),
Telephone1 nvarchar(50),
MobilePhone nvarchar(50),
Fax nvarchar(50),
EMailAddress1 nvarchar(100),
Department nvarchar(100),
new_mobilephone2 nvarchar(100),
new_fax2 nvarchar(100),
Description nvarchar(max),
GenderCode int,
new_qqnumber nvarchar(100)
)

我原以为是nvarchar的max长度或者uniqueidentifier类型的问题,uniqueidentifier的值是这样格式“726C095E-8DC0-4EED-BE59-0006381B8E69”,但是这样测试又不像了,反而像是缓存。。
有没谁懂透明网关的帮忙解释下,并提供个解决办法?
...全文
226 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingrou123 2014-01-22
  • 打赏
  • 举报
回复
今天在测试服务器测,32位11gR2的环境,直接select *又可以了。。。
qingrou123 2014-01-22
  • 打赏
  • 举报
回复
不应该是nvarchar(max),如果是类型的话第3、4步操作不会行得通的。至于传过来的字符会加大3倍,这个我用create table as测试结果是原来nvarchar(m)的,过来全变成nvarchar2(m)。然后再建1张一样结构的表,把nvarchar2替换为varchar2,再insert .. select ...不会报错。
qingrou123 2014-01-16
  • 打赏
  • 举报
回复
再浮起来一下
BUG胡汉三 2014-01-16
  • 打赏
  • 举报
回复
引用 3 楼 lqscoke 的回复:
通过透明网关传送过来的字符类型列会被加大为3倍,顶一下!
可不能盲目相信呢,具体的得做测试! 我这边的环境Oracle连接SqlServer是通过配置SqlServer的ODBC数据源来实现的! create table test_tbl as select * from SQLSERVERTABLE;过来的时候数据长度是没有变化的! 具体的还得请LZ做个测试,给个结果看看才能知道!
lqscoke 2014-01-16
  • 打赏
  • 举报
回复
通过透明网关传送过来的字符类型列会被加大为3倍,顶一下!
BUG胡汉三 2014-01-16
  • 打赏
  • 举报
回复
LZ做测试在详细一点!应该了解到具体是到哪一个字段出错了! 确实有可能是nvarchar的max长度或者是什么类型的问题哦! 如果你能继续还原错误就好了,试试在SqlServer中在新建一张跟contact结构一样的表,用于重现错误。 然后一个字段一个字段的查询(如果查询所有的时候有提示具体是那一列就不用这么干了),看看是哪个字段的问题。 如果是Description nvarchar(max) 那么就找一个Description内容最短的记录做条件查询看看是否继续报错!然后在找最长的。 在不报错的时候最好将查询的结果放到Oracle中的表里面。看看Oracle给你转换成了什么类型! ---------------来源网络---------------- 通过透明网关传送过来的字符类型列会被加大为3倍 譬如原来的字符列长度是 VARCHAR2(100) 到了ORACLE中就会变为 VARCHAR2(300) 因此如果原来的字符串是2000 到了ORACLE中就变为了6000 超过了VARCHAR2类型的最大支持长度 原文地址:http://www.itpub.net/forum.php?mod=viewthread&tid=1713920 ---------------------------------------

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧