select * from xxx where id in (select id from (select id from XXX order by dbms_random.value ) where rownum<n);

解决方案 »

  1.   

    产生随机记录的方法很多,完全可以不必用你提到的游标加数组的方法:
    (1)完全随机
      select id from (select id from XXX order by dbms_random.value()) 
        where rownum< N; 
    (2)半随机( 此处要注意v_count与N的关系,要判断处理,但记录数多的时候也有点时间优势,呵呵)
       v_no:= dbms_random.value(1,v_count) --v_count为XXX表的记录总数
       select aa.id from (select id,rownum row_num from XXX where rownum<=v_no) aa
        where  aa.row_num> v_no - N;   
      

  2.   


    这句可以随机选出记录
     select * from xxx id in ( (select rownum rn,a.* from t_name a)a where rn=round(dbms_random.value(1,n)));