Oracle如何实现从特定组合中随机读取值

在这里,我们会用到DBMS_RANDOM包和CASE WHEN语句,思路如下:

一、利用DBMS_RANDOM.RANDOM函数随机生成数值,然后对数值进行取模,如果我们要在10个元素中随机读取的话,那我们需要对10进行取模。

二、再将取模后的值利用CASE WHEN语句与元素进行关联。

譬如,我有一个组合,里面包含“北京”,“上海”,“广州”,“深圳”,“武汉”五个元素,想从这五个元素中随机读取值来填充表的某个字段。

首先,创建测试表

SQL> create table test(loc varchar2(2 char));

Table created.

构造能随机读取元素的SQL语句

select case mod(abs(dbms_random.random),5)
       when 1 then '北京'
       when 2 then '上海'
       when 3 then '广州'
       when 4 then '深圳'
       else '武汉' end "LOC"
from dual;

大批量填充test表的loc字段

复制代码
begin
  for i in 1..10 loop
     insert into test values(case mod(abs(dbms_random.random),5)
          when 1 then '北京'
          when 2 then '上海'
          when 3 then '广州'
          when 4 then '深圳'
          else '武汉' end );
  end loop; 
end;
复制代码

最后生成的结果如下:

复制代码
SQL> select * from test;

LOC
--------
武汉
广州
上海
北京
上海
武汉
北京
上海
武汉
深圳

10 rows selected.
复制代码

 

posted @   iVictor  阅读(3832)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示