在PLSQL中使用复杂查询中的sample函数
在PLSQL中使用复杂查询中的sample函数
我想从我的查询结果中选择一个随机样本。我已经阅读了这个答案How to get records randomly from the oracle database?,但是我无法使dbms_random.random工作,所以我尝试了sample函数。但是当我请求一个样本时,我遇到了错误。一个可以重现的示例如下:
提供的示例查询只是为了可重现性,与我的实际用例无关(即我不想选择7行或类似的内容)
select * from (select 1,2,3,4,5,6,7 from dual) sample(0.1) --不起作用 select * from (select 1,2,3,4,5,6,7 from dual)t sample(0.1) --也不起作用
我在这里做错了什么?我的目标是从子查询的结果中选择一个随机样本,但我没有使用dbms_random.value的权限。
在PLSQL中使用复杂查询的时候,有一个常见的问题是Oracle不支持对派生表或不保留键的视图进行抽样。这意味着无法在这些情况下使用sample函数来进行抽样操作。这个限制在Oracle的官方文档中有详细说明。
另外,如果你想在Oracle中为前7个整数创建1行记录,可以使用以下查询语句:
select level from dual connect by level <= 7
当遇到无法使用sample函数进行抽样的情况时,有一个解决方法是创建一个临时表,然后在这个表上使用sample函数进行抽样操作,最后再删除这个临时表。具体操作如下:
create table x as ... select * from x sample(10); drop table x;
通过创建临时表x,我们可以在这个表上使用sample函数进行抽样操作。然后,我们可以从这个临时表中查询所需的数据,并使用sample函数指定抽样的比例。最后,通过drop table语句删除这个临时表,以避免对数据库的影响。
总结起来,当在PLSQL中遇到无法使用sample函数进行抽样的情况时,可以通过创建临时表来解决这个问题。这种方法可以绕过Oracle对派生表和不保留键的视图的抽样限制,从而实现所需的抽样操作。