我碰上了这种情况,不知道怎么处理.情况是这样的:表里面有几个字段,A,B, C, D等其中A字段是number类型,并且是表的主键字段当查询时,使用select * from 表 where C = '指定值' 查出来结果,发现有几条记录。奇怪的是,每条记录字段A值都是一样的。(这些记录的B和C字段值则不同)但更奇怪的是,取查询出来的一条记录的A字段值,执行另一个查询,select * from 表 where A = '查询出来的值'结果只返回一条记录(查出来的记录,B,C,D的值都跟之前查出来的不同)查看执行计划,第一条sql走的是普通索引扫描(C上面建了一个普通索引)
第二条sql走的是唯一索引扫描(A上面建了主键)查all_indexes的索引状态status两个索引都是valid的
================================================================
不知道各位有没有碰上类似这样的问题,表有主键,但是数据有重复。 用两个逻辑等价的sql查询返回结果不同。是什么原因造成的? 要怎么验证? 怎么解决?  怎么避免?

解决方案 »

  1.   

    我相信主键列,不会相同的看下,应是没记录的,如果有记录说明A不是主键或单一主键
    select A,count(1) from 表
    group by A
    having count(1)>1;
      

  2.   

    all_constraints 里面有两个字段  一个是 status  一个是 validated  你看看这个是否是正常。 
    有一种叫做关系 启用 ,但不合法
      

  3.   

    谢谢ls回复,我连上环境查查看想问一下,这种启动不合法的状态会是什么情况造成的?会对sql执行计划,执行结果有影响吗
      

  4.   

    问题解决了,是客户程序取数结果显示错误导致的。该程序在查询返回的number值较大时,会将结尾全显示成0谢谢各位热心回答
      

  5.   

    得了一个教训,下次再有客户报障,要用sqlplus确认一次,因为客户程序有可能有bug