Oracle 11g:与dbms_random结合使用

时间:2013-04-18 08:10:32

标签: sql function stored-procedures oracle11g

我正在尝试在oracle 11g中编写sql语句,该语句将从具有相同列的两个不同表的联合中随机选择5000条记录:

select * 
  from (
       select ename, job
       from emp1
       union all
       select ename, job
       from emp2
       order by dbms_random.value()
        )
where rownum <= 5000

运行时,我收到错误ORA-01785:ORDER BY项必须是SELECT列表表达式的编号。 当我删除第二个表时它工作得很好。但是,现在我需要从两个表中随机选择,首先将它们联合起来,随机排序然后选择其中的5000个。

或者也许有其他方法有相同的结果?

Tnx寻求帮助。

1 个答案:

答案 0 :(得分:2)

您的ORDER BY仅适用于UNION ALL的第二部分 - 您必须首先执行UNION ALL,然后应用ORDER BY:

select * 
  from (
    select * from (
       select ename, job
       from emp1
       union all
       select ename, job
       from emp2
    )
    order by dbms_random.value()
)
where rownum <= 5000