最近因为项目需要,接触到了透明网关,折腾了许久,终于有点心得。希望能对同仁有些帮助。
在网上查找透明网关的资料时,发现最多的问题在于两个方面,
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)对字段名的大小写并不敏感,所以这一改动并不影响其他系统
到此,终于解决了项目中的问题
透明网关不认字段的解决方案(tg4mssql)
最新推荐文章于 2022-07-01 17:27:30 发布