导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2017/3/17 14:49:35
标题:
UniDAC直连Oracle,跨数据库查询问题
浏览:1813
加入我的收藏
楼主:
select a.xh, a.renyuan from T_INFO@RLSB a where a.renyuan like 'fr%' xh为20位的数字,renyuan为不超过5个字符的字符串,且全为英文字符。 连oracle数据库,上面语句在PL/SQL developer中运行有多条结果数据。 使用 UniDac 6.4.15直连该数据库,运行该语句,结果为空集,但若去掉Where条件,则有数据。 UniDac 直连数据库,上面语句属跨数据库查询, 若运行其他不跨数据库查询SQL,则一切正常。 跨数据库查询,为啥加上条件就UniDac 没结果呢? PL/SQL developer却有。 是不是UniDac直连存在缺陷?
----------------------------------------------
-
作者:
2017/3/17 19:37:36
1楼:
dblink? 我的没有问题,如是不同的用户的用 架构.表名 都可以访问。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
2017/3/17 20:18:25
2楼:
是dblink,但是是别人建立的,我只能使用,也看不到是建立时的参数。 不带Where正常出结果。带Where且对renyuan进行值比较(相等、大于、小于、Case等等),则出来的结果为空集(PL/SQL developer中运行则不为空集,即语句筛选条件没问题),若where中是其他条件,不对renyuan字段进行比较,则也可以出结果。 例:下列语句对xh进行筛选,UniDac执行后也可以出结果 select a.xh, a.renyuan from T_INFO@RLSB a where a.xh in (select xh from mfg k where k.dm like '51%')
----------------------------------------------
-
作者:
2017/3/17 21:09:21
3楼:
uniConnection 使用unicode编码试试。 还不行你请人重建一下dblink吧,再不行。。。换个unidac版本??
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
2017/3/18 11:19:07
4楼:
Oracle DBLink 确实经常会有问题,有时跨数据库查询,两个数据表单独查都非常快,且能查询出数据,但一关联就非常非常慢甚至查询不到。有时没办法只能用临时表,将远程查询出来的数据集放到本地的临时表中,再管理查询。
----------------------------------------------
-
作者:
2017/3/19 0:18:57
5楼:
同样也遇到类似的问题,模糊查询where billno like '1223%' 数据库中有1223 1223. 12234 的话,只出1223的数据,其他都没。
----------------------------------------------
-不忘初心,方得始终-
作者:
2017/3/19 11:51:26
6楼:
@3楼:Oracle DBLink,查询表的汉字字段无乱码,应该与unicode编码没有关系。 @4楼:用with语句将远程查询出来的数据集放到临时表中,语句中不用 where a.renyuan like 'fr%',可以用where a.xh in (select xh from mfg k where k.dm like '51%'),查出来有数据(详见2楼介绍),再对临时表应用条件 where a.renyuan like 'fr%',则也没有数据。 我没有在数据库中建真正临时表的权限,只能用With语句。 用UniDac直连oracle,有以上问题。有可能是UniDac直连驱动有缺陷。 没试过不采用直连,用Oracle的驱动,是不是也有问题。下来试试。不知有没有老师已经试过了? 同样语句,PL/SQL developer用的Oracle的驱动,运行就没问题。
----------------------------------------------
-
作者:
2017/3/21 20:50:20
7楼:
经测试,用UniDac 6.4.15直连Oracle,将条件由 where a.renyuan like 'fr%' 改为 where upper(a.renyuan) like 'FR%' 正常查出数据(与PL/SQL developer中运行结果一样)。 但若改为 where lower(a.renyuan) like 'fr%' 则没有数据。 只有大写的字符串比较才有效,啥原因?
----------------------------------------------
-
作者:
2017/3/22 11:17:36
8楼:
oracle是区分大小写的,还可以查看v$sql,看oracle处理的SQL
----------------------------------------------
-
作者:
2017/3/24 18:13:10
9楼:
数据表中字段renyuan实际存储的内容全为小写英文字母。 采用条件 lower(a.renyuan) like 'fr%' 或 a.renyuan like 'fr%' 在PL/SQL developer中运行正确有效,用UniDac就不行,需要转换为大写后比较才有效。 不知为何?
----------------------------------------------
-