解决方案 »

  1.   

    想明白了,道理是这样的,问题出在where rr = ROUND(DBMS_RANDOM.VALUE(1, 106))上面
    我们正常会以为,是随机产生一个数。。但实际上是为每一行产生一个随机数。。如果随机数恰巧与rr相同的情况下,就会满足条件。如果没有碰到随机数与rr相同则什么都查不出来。。
    所以就会出现结果集个数不一致的情况。。
     
      

  2.   

    SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1;     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1;     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          7934 MILLER     CLERK           7782 23-1月 -82            100                    10
      

  3.   

    已得正解:
    select city_id, PROVINCE_ID, REGION_ID
       from (select city_id, city_desc, PROVINCE_ID, REGION_ID
       from CT_D_GEO_CITY order by dbms_random.value
     )
       where rownum=1;
    可是order by dbms_random.value 是什么逻辑?
      

  4.   

    已得正解:
    select city_id, PROVINCE_ID, REGION_ID
       from (select city_id, city_desc, PROVINCE_ID, REGION_ID
       from CT_D_GEO_CITY order by dbms_random.value
     )
       where rownum=1;
    可是order by dbms_random.value 是什么逻辑?
    打乱顺序,相当于随机取一行。。