日期:2014-05-17  浏览次数:21165 次

关于Oracle记录随机排序
有一张表TableName1,字段个数为8,有下列语句:
SQL code

SELECT * FROM TableName1 
ORDER BY 1;


在oracle中,这么写表示按照第1个字段排序;1为第一个字段的索引(当然,不能超过字段索引最大值);也就是说,不管我order哪一个字段索引,这里的排序方式都不会超过8种;

然而,在执行下列语句时:
SQL code

SELECT * FROM TableName1 
ORDER BY DBMS_RANDOM.value;


按照理解;函数DBMS_RANDOM.value表示产生一个随机数;执行原理与上述语句相同,排序方式不会超过8种,但是,实际上随机排序方式却超过了8种。

-->
有些不解,再此求教。

------解决方案--------------------
这种是把DBMS_RANDOM.value当成一列来处理了。相当于
SELECT t.*,DBMS_RANDOM.value FROM TableName1 t 
ORDER BY DBMS_RANDOM.value;

------解决方案--------------------
探讨
有一张表TableName1,字段个数为8,有下列语句:

SQL code

SELECT * FROM TableName1
ORDER BY 1;


在oracle中,这么写表示按照第1个字段排序;1为第一个字段的索引(当然,不能超过字段索引最大值);也就是说,不管我order哪一个字段索引,这里的排序方式都不会超过8种;

然而,在执行下列语句时:

SQL c……

------解决方案--------------------
SQL code

 select * from emp
 order by trunc(dbms_random.value(1,8));
--dbms_random.value(1,8)是取1-8之间的随机数 有小数
--trunc(dbms_random.value(1,8))截取整数部分