如何从程序 oracle 中的表中随机打印?

Posted

技术标签:

【中文标题】如何从程序 oracle 中的表中随机打印?【英文标题】:How to print random from table in a procedure oracle? 【发布时间】:2021-11-26 12:04:06 【问题描述】:

假设我有一个表 child,我想在一个过程中从 1 到 5 中随机选择表中的随机值并打印它们。我该怎么做?

create table child(name varchar2(20), age number);
insert into child(name, age) values('A',5);
insert into child(name, age) values('B',12);
insert into child(name, age) values('C',7);
insert into child(name, age) values('D',4);
create or replace procedure random_child
as
 l_name child.name%type;
 l_age child.age%type;
begin
  for i in(select dbms_random.value(1,5) 
           from (select name from child sample(50)))
loop
 DBMS_OUTPUT.put_line(i.name);
end loop;
end;

它给了我一个PLS-00302:必须声明名称

【问题讨论】:

【参考方案1】:

你可以使用:

CREATE PROCEDURE random_child
AS
BEGIN
  FOR i in(
    SELECT name,
           FLOOR(DBMS_RANDOM.VALUE(1,6)) AS value
    FROM   child
    SAMPLE(50)
  )
  LOOP
   DBMS_OUTPUT.put_line(i.name || ' ' || i.value);
  END LOOP;
END;
/

然后:

BEGIN
  random_child();
END;
/

可能随机输出:

B 3
C 2
D 2

db小提琴here

【讨论】:

【参考方案2】:

那里没有i.name;第 6 行末尾缺少别名:

SQL> create or replace procedure random_child
  2  as
  3   l_name child.name%type;
  4   l_age child.age%type;
  5  begin
  6    for i in(select dbms_random.value(1,5)  as name  --> here
  7             from (select name from child sample(50)))
  8  loop
  9   DBMS_OUTPUT.put_line(i.name);
 10  end loop;
 11  end;
 12  /

Procedure created.

SQL> exec random_child
1,30966411991963041689918865935551009464
1,13993832387089615287177388489291237644
3,85292920191145794430114472793297022632

PL/SQL procedure successfully completed.

SQL>

【讨论】:

以上是关于如何从程序 oracle 中的表中随机打印?的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个表中的随机值添加到另一个 Oracle SQL

从 Snowflake 中的表中选择随机百分比(使用 WHERE 子句时)

Oracle 中实现随机抽取数据

问题:从带有工厂的表中随机生成数据

将随机数据插入到 MySql 中的表中

如何从oracle数据库中随机获取记录?