如何从 PL/SQL 中的集合中 select 随机值?
How to select a random value from a collection in PL/SQL?
我有一个充满数据的集合
如何从那里 select 随机数据?
declare
TYPE r_emp_id IS TABLE OF NUMBER;
emps r_emp_id;
begin
select employes_id into emps from employes order by employes_id;
for i in <(random number of employes_id from emps)> loop
DBMS_OUTPUT.put_line(employes_id (i));
end loop;
end;
您想 BULK COLLECT INTO
一个集合,如果您只想要一个随机值,则不需要循环:
DECLARE
TYPE r_emp_id IS TABLE OF NUMBER;
emps r_emp_id;
i PLS_INTEGER;
BEGIN
SELECT employes_id
BULK COLLECT INTO emps
FROM employes
ORDER BY employes_id;
i := FLOOR(DBMS_RANDOM.VALUE(1, emps.COUNT + 1));
DBMS_OUTPUT.put_line(emps(i));
END;
/
如果您希望所有值随机排列,则:
DECLARE
TYPE r_emp_id IS TABLE OF NUMBER;
emps r_emp_id;
BEGIN
SELECT employes_id
BULK COLLECT INTO emps
FROM employes
ORDER BY DBMS_RANDOM.VALUE;
FOR i IN 1 .. emps.COUNT LOOP
DBMS_OUTPUT.put_line(emps(i));
END LOOP;
END;
/
但是,对于单个值,您可以完全跳过集合:
DECLARE
emp_id EMPLOYES.EMPLOYES_ID%TYPE;
BEGIN
SELECT employes_id
INTO emp_id
FROM employes
ORDER BY DBMS_RANDOM.VALUE
FETCH FIRST ROW ONLY;
DBMS_OUTPUT.put_line(emp_id);
END;
/
或者,在 SQL(而不是 PL/SQL)中:
SELECT employes_id
FROM employes
ORDER BY DBMS_RANDOM.VALUE
FETCH FIRST ROW ONLY;
db<>fiddle here
我有一个充满数据的集合 如何从那里 select 随机数据?
declare
TYPE r_emp_id IS TABLE OF NUMBER;
emps r_emp_id;
begin
select employes_id into emps from employes order by employes_id;
for i in <(random number of employes_id from emps)> loop
DBMS_OUTPUT.put_line(employes_id (i));
end loop;
end;
您想 BULK COLLECT INTO
一个集合,如果您只想要一个随机值,则不需要循环:
DECLARE
TYPE r_emp_id IS TABLE OF NUMBER;
emps r_emp_id;
i PLS_INTEGER;
BEGIN
SELECT employes_id
BULK COLLECT INTO emps
FROM employes
ORDER BY employes_id;
i := FLOOR(DBMS_RANDOM.VALUE(1, emps.COUNT + 1));
DBMS_OUTPUT.put_line(emps(i));
END;
/
如果您希望所有值随机排列,则:
DECLARE
TYPE r_emp_id IS TABLE OF NUMBER;
emps r_emp_id;
BEGIN
SELECT employes_id
BULK COLLECT INTO emps
FROM employes
ORDER BY DBMS_RANDOM.VALUE;
FOR i IN 1 .. emps.COUNT LOOP
DBMS_OUTPUT.put_line(emps(i));
END LOOP;
END;
/
但是,对于单个值,您可以完全跳过集合:
DECLARE
emp_id EMPLOYES.EMPLOYES_ID%TYPE;
BEGIN
SELECT employes_id
INTO emp_id
FROM employes
ORDER BY DBMS_RANDOM.VALUE
FETCH FIRST ROW ONLY;
DBMS_OUTPUT.put_line(emp_id);
END;
/
或者,在 SQL(而不是 PL/SQL)中:
SELECT employes_id
FROM employes
ORDER BY DBMS_RANDOM.VALUE
FETCH FIRST ROW ONLY;
db<>fiddle here