다량의 데이터를 생성하기 위해 coonect by level 기능을 사용하려하는데
잘 안되는 부분이 있습니다. 예를 들면..
with temp as (
select 1 temp_no, 'A' temp_nm, 'AA' temp_desc from dual
union all
select 2 temp_no, 'B' temp_nm, 'BB' temp_desc from dual
union all
select 3 temp_no, 'C' temp_nm, 'CC' temp_desc from dual
union all
select 4 temp_no, 'D' temp_nm, 'DD' temp_desc from dual
union all
select 5 temp_no, 'E' temp_nm, 'EE' temp_desc from dual
)
select
rownum,
(select temp_no from (select temp_no from temp order by dbms_random.random) where rownum <= 1) temp_no
from dual
connect by level <= 10;
위 쿼리에서 connect by level이 없는 상태에서는 랜덤하게 row가 select되는데
connect by level을 걸면 의도와 다르게 모든 값이 동일하게 표시되네요.
혹시 다른 방법이 있을련지 궁금합니다.
-- 작성하신 쿼리는 정해진 temp_no 값이 10번 들어가서 동일한 값이 될껀데. 의도 하시는게 temp_no 가 매번 다른 랜덤값인가요? WITH temp AS ( select 1 temp_no, 'A' temp_nm, 'AA' temp_desc from dual union all select 2 temp_no, 'B' temp_nm, 'BB' temp_desc from dual union all select 3 temp_no, 'C' temp_nm, 'CC' temp_desc from dual union all select 4 temp_no, 'D' temp_nm, 'DD' temp_desc from dual union all select 5 temp_no, 'E' temp_nm, 'EE' temp_desc from dual ) SELECT ROWNUM , ROUND(DBMS_RANDOM.VALUE() * (SELECT MAX(temp_no)-1 FROM temp)) + 1 temp_no FROM dual CONNECT BY LEVEL <= 10;