This is an old revision of the document!
10 zufällige, nicht doppelte Employees ziehen
CREATE OR REPLACE PROCEDURE PLSQL_TABLE AS type type_emp is table of employees%rowtype -- index by varchar2(100); index by binary_integer; cursor c_emp is select * from employees order by salary desc; t_emp type_emp; t_emp_bulk type_emp; -- v_index varchar2(100); v_index binary_integer; v_ind_rand binary_integer; v_c number := 0; BEGIN for r_emp in c_emp loop -- t_emp(r_emp.first_name||' '||r_emp.last_name) t_emp(r_emp.employee_id) := r_emp; end loop; open c_emp; fetch c_emp bulk collect into t_emp_bulk; close c_emp; -- while v_c < 10 loop v_ind_rand := trunc(dbms_random.value * t_emp_bulk.count); if t_emp_bulk.exists(v_ind_rand) then dbms_output.put_line(v_ind_rand||' '|| t_emp_bulk(v_ind_rand).first_name); v_c := v_c + 1; end if; end loop; dbms_output.put_line('2te möglichkeit'); v_index := t_emp.first; dbms_output.put_line(t_emp.count); /* t_emp.delete(209); dbms_output.put_line(t_emp.count); while v_index is not null loop dbms_output.put_line(v_index||' '|| t_emp(v_index).first_name); v_index := t_emp.next(v_index); end loop; */ for j in 1..10 loop v_ind_rand := trunc(dbms_random.value*t_emp.count); v_index := t_emp.first; for i in 1..v_ind_rand loop v_index := t_emp.next(v_index); end loop; dbms_output.put_line(v_index||' '|| t_emp(v_index).first_name); t_emp.delete(v_index); end loop; END PLSQL_TABLE;