대량 데이터 삽입 0 6 2,629

by 손님 [PL/SQL] [2011.02.15 13:19:56]


begin
   FOR i IN 1.10000 LOOP
insert into test_db values(
   FLOOR(DBMS_RANDOM.VALUE(1, 100)),
   dbms_random.string( 'b', 20 ),
   TO_DATE('201001','yyyymm') +
   FLOOR(DBMS_RANDOM.VALUE(0, 365 + 31))
);
   end loop;
end;

for문으로 3건을 하면 insert 삽입이 되는데..
10000건을 돌릴 경우 삽입이 안되네요
궂이 pl/sql문이 아니더라도.. sql문을 통해 
대량 삽입 할 방법을 알고 싶습니다.

그리고 문자를 규칙적으로 랜덤하게 넣고 싶은데
   dbms_random.string( 'b', 20 ) 문을 사용하니 규칙적이지가 않네요..

감사합니다
by camela [2011.02.15 13:27:46]
문자를 규칙적으로 랜덤하게(?) 라는게 어떤 건지요?
어떤 규칙이 있어야 되는지?

insert into test_db
select FLOOR(DBMS_RANDOM.VALUE(1, 100))
, dbms_random.string( 'b', 20 )
, TO_DATE('201001','yyyymm') + FLOOR(DBMS_RANDOM.VALUE(0, 365 + 31))
from dual
connect by level <= 1000

by 마농 [2011.02.15 13:38:16]
1. 3건은 되는데, 만건은 안된다?
- 안되는 원인을 찾으셔야죠. 그러려면 에러메시지를 분석하셔야 하구요.

2. 한방에 되는것은 Insert Select 를 이용하시면 됩니다.
- camela 님 제시한 방법

3. 문자를 규칙적으로 랜덤하게(?)
- 모순된 표현이죠. 앞뒤가 안맞는.
- 원하시는바가 무었인지 정확하게 설명해 보세요.

4. dbms_random.string(opt char, len NUMBER)
- opt 자리에 올 수 있는 옵션은 다음과 같습니다. ('b'는 없는 옵션)
'u','U' : upper case alpha characters only
'l','L' : lower case alpha characters only
'a','A' : alpha characters only (mixed case)
'x','X' : any alpha-numeric characters (upper)
'p','P' : any printable characters

by 손님 [2011.02.15 14:19:32]
camela님이 해주신 SQL문으로 돌려도
10개는 되는데 그 이상을 할려고 하면 다음과 같은 에러가 뜨네요
*
1┐┐ ┐┐:
ORA-00001: ┐┐┐ ┐┐ ┐┐(HR.SYS_C004060)┐ ┐┐┐┐┐

그리고 왜 제 오라클은 한글이 깨져서 나오는지.. 킁.. ㄷㄷㄷ

by 채용근 [2011.02.15 14:20:23]
무결성..제약조건..

by 마농 [2011.02.15 14:27:48]
해당 테이블에 주키가 설정되어 있을 것입니다.
아마 첫번째 컬럼이 아닐까? 생각이 되구요.
주키는 중복이 되면 안되는데요.
이 값을 랜덤 값으로 입력하니 중복이 발생할 수밖에 없겠죠.
랜덤으로 할게 아니라 순번으로 해야겠네요.
FLOOR(DBMS_RANDOM.VALUE(1, 100)) 대신 LEVEL 이나 ROWNUM 을 입력하세요.
그리고 무조건 입력하지 마시고 select 쿼리만 따로 돌려서 먼저 자료부터 확인하세요.

by 손님 [2011.02.15 14:34:25]
아우~ 마농, camela, 채용근님..
모두 답변 감사드립니다.
명쾌한 해결 감사드립니다 :-)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입