如何在ORACLE数据库中随机选取一条记录?

Mark_zheng 2001-10-18 08:38:13
如题
...全文
353 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuzhichao 2001-10-18
  • 打赏
  • 举报
回复
SQL Server有rand函數,而Oracle沒有,於是本人寫了一個rand
有些牽強,而且取得的隨機數還是有很大的規律,抱歉.

create or replace Function RAND
(in_value in int default 1)
RETURN float IS

-- MODIFICATION HISTORY
-- Person Date Comments
-- zhuzhichao 2001/10/18 取得隨機數
return_value float;
-- Declare program variables as shown above
BEGIN
select (to_number(to_char(sysdate,'SS')) + 1) / 60 * in_value into return_value from dual ;
--利用秒數來得到隨機數,return_value的值域為(0,in_value],大於0,小於等於in_value
RETURN return_value ;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error ---------------' || sqlcode || ' : ' || sqlerrm );
END; -- Function RAND

然後在Oracle8.15及之上版本中可以這麼寫來從TableName表中隨機提取一條紀錄:

select * from
(select rownum r,b.* from TableName b) tt
where tt.r=ceil(rand()*(select max(rownum) from TableName));
zhuzhichao 2001-10-18
  • 打赏
  • 举报
回复
上午太忙了,至少在中午之前給你個答案.

BTW:
用where rownum = 隨機數
是不行的,如果'隨機數'大於1的話,
Oracle將提不出數據.

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧