透明网关不认字段的解决方案(tg4mssql)

最近因为项目需要,接触到了透明网关,折腾了许久,终于有点心得。希望能对同仁有些帮助。

在网上查找透明网关的资料时,发现最多的问题在于两个方面,
1是如何配置的问题,
2就是字段访问的问题。

配置的方案应该没什么可再说的了,主要讨论一下不认字段的问题

Oracle版本:9.2.0.1
MSSQL:2000

在Oracle下执行SQL语句:select * from zj_cpbm@scdb t,查询结果如下

ItemID        MLongth        Width        Thick        MarkID        PhysStatus
019000050000100        10.0000        10.0000        1.0000        1060        H24
019008250000090        2000.0000        1000.0000        0.2500        1050        H14
....
但是执行sql语句select t.itemid from zj_cpbm@scdb t,报错
ORA-00904:"T"."ITEMID":无效的标志符

四处求救,得到的解决方案是,把字段名用双引号""引起来
select t."ItemID" from zj_cpbm@scdb t
执行就没问题了

请注意,这里的双引号内的字段名的字母大小写必须跟select * from zj_cpbm@scdb t查询得出的字段名的大小写一致,否则仍会报错

事情到这儿应该算解决了,各方面也没有提出其他的解决办法,但是这对于习惯使用oracle的程序员来说比较痛苦,如果我在java中写一个查询语句,我得这样写

String sql="select t./"ItemID/",t./"MLongth/" from zj_cpbm@scdb t";...
还得注意字母的大小写千万不要写错,
更加头疼的是项目中原有一部分程序使用是直接连接MSSQL写的,要改起来工作量就更大了

突然想起在oracle中创建数据表时,所有字段名查询出来字母都是大写的
比如:select t.item from itemTable t
ITEMID
019000050000100
...

想想oracle的sql语句应该是在编译的时候所有字段名都是解析为字母大写
于是想到对于MSSQL数据库字段名都为大写字母的数据表进行查询
select t.a1,t.a2 from zj_report@scdb t
A1 A2
... ...
结果没有任何问题

于是进入MSSQL数据库把zj_cpbm表的字段名的字母都改成大写
ItemID->ITEMID
MLongth->MLONGTH       
Width->WIDTH       
...
再在oracle里测试
select t.itemid,t.mlongth,t.width from zj_cpbm@scdb t
执行结果完全没有问题,也省去了考虑字段名大小写及双引号的问题,原有的直接连接MSSQL的程序大部分之需要把数据库连接改成连接oracle,在sql语句里把原来的表名后加上"@scdb"就一切OK了

由于一般直接直接连接MSSQL的程序语言(VB,VC)对字段名的大小写并不敏感,所以这一改动并不影响其他系统

到此,终于解决了项目中的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值