一个奇怪的SQL,大家帮忙看看

[复制链接]
查看11 | 回复1 | 2012-8-16 15:48:56 | 显示全部楼层 |阅读模式
我有一个SQL,运行时输入的参数都相同,但得出的结果每次都不同。
SQL如下:
select t.account_no
,t.poid_id0
,t.gl_segment
,cg.segment_name
from account_t t
,config_gl_segment_t cg
where nvl(t.gl_segment,'NULL') = cg.segment_name(+)
and cg.segment_name(+) '.'
and ('' is null or t.gl_segment = '')
and t.account_no BETWEEN NVL(:v_range_s,'0') AND NVL(:v_range_e,'ZZZZZZZZZZZZZZZZZZZZ')
order by poid_id0;
在TOAD中,输入参数v_range_s=0,v_range_e=ZZZZZZZZZZZZZZZZZZZZ
结果(结果中最后一列SEGMENT_NAME不停的变化,我只列举了两种):
ACCOUNT_NOPOID_ID0GL_SEGMENT
SEGMENT_NAME
ROOT
1
.NT_WEST
0.0.0.1-726051 726051.NT_WEST
.NT_WEST
0.0.0.1-787123 787123.NT_EAST_AND_NORTH .NT_WEST
0.0.0.1-787155 787155.NT_EAST_AND_NORTH .NT_WEST
705851200 787783.NT_EAST_AND_NORTH .NT_WEST
ACCOUNT_NOPOID_ID0GL_SEGMENT
SEGMENT_NAME
ROOT
1
.NT_EAST_AND_NORTH
0.0.0.1-726051726051 .NT_WEST
.NT_EAST_AND_NORTH
0.0.0.1-787123787123 .NT_EAST_AND_NORTH .NT_WEST
0.0.0.1-787155787155 .NT_EAST_AND_NORTH .NT_EAST_AND_NORTH
705851200 787783.NT_EAST_AND_NORTH .NT_EAST_AND_NORTH
我用
create table test_acc as select * from account_t;
create table test_config as select * from config_gl_segment_t;
然后换掉上述SQL中的两个table,再运行SQL,不会出现问题,或者去掉上述SQL中的这个条件:
and t.account_no BETWEEN NVL(:v_range_s,'0') AND NVL(:v_range_e,'ZZZZZZZZZZZZZZZZZZZZ')
也不会出现问题。
有人知道这是什么原因吗?
回复

使用道具 举报

千问 | 2012-8-16 15:48:56 | 显示全部楼层
没人知道吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行