如何从程序 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 中的表中随机打印?的主要内容,如果未能解决你的问题,请参考以下文章