DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: wjy13061029975
今日帖子: 3
在线用户: 2
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
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直连存在缺陷?
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2017/3/17 19:37:36
1楼: dblink? 
我的没有问题,如是不同的用户的用 架构.表名 都可以访问。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
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%')
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2017/3/17 21:09:21
3楼: uniConnection 使用unicode编码试试。

还不行你请人重建一下dblink吧,再不行。。。换个unidac版本??
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 kenliaoliao (ben) ★☆☆☆☆ -
普通会员
2017/3/18 11:19:07
4楼: Oracle DBLink 确实经常会有问题,有时跨数据库查询,两个数据表单独查都非常快,且能查询出数据,但一关联就非常非常慢甚至查询不到。有时没办法只能用临时表,将远程查询出来的数据集放到本地的临时表中,再管理查询。
----------------------------------------------
-
作者:
男 xigua163 (西瓜163) ★☆☆☆☆ -
普通会员
2017/3/19 0:18:57
5楼: 同样也遇到类似的问题,模糊查询where billno like '1223%'
数据库中有1223  1223. 12234 的话,只出1223的数据,其他都没。
----------------------------------------------
-不忘初心,方得始终-
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
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的驱动,运行就没问题。
----------------------------------------------
-
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
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%'
则没有数据。

只有大写的字符串比较才有效,啥原因?
----------------------------------------------
-
作者:
男 l_star (l.star) ★☆☆☆☆ -
普通会员
2017/3/22 11:17:36
8楼: oracle是区分大小写的,还可以查看v$sql,看oracle处理的SQL
----------------------------------------------
-
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
2017/3/24 18:13:10
9楼: 数据表中字段renyuan实际存储的内容全为小写英文字母。

采用条件
lower(a.renyuan)  like  'fr%'

a.renyuan  like  'fr%'
在PL/SQL developer中运行正确有效,用UniDac就不行,需要转换为大写后比较才有效。

不知为何?
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行85.9375毫秒 RSS