我有一个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')
也不会出现问题。
有人知道这是什么原因吗?
|