→ Top Page ←
→ Guestbook ←
→ Read RSS Paper ←
→ Admin ←
 
09/02/12 20:50 | Study - Work
Array를 이용한 다중 DB Insert
간만의 포스팅이 일이야기라니..
내 삶이 삭막하기 그지없구나.. -_-;;;

어쩌둥둥.. 시작한 포스팅.. 마무리를 지어야지..

이번에 대용량 데이터를 처리해야 하는 일이 생겨 처음으로 사용해 본
Array를 이용한 DB 다중 Insert !!
뭐 아는 사람들은 이미 알수도 있지만.. 나의 DB지식의 밑천은 학부때 들은 DB수업이 달랑인지라... 아직도 DB의 세계는 심오하기만 한다.. -_-;;
(인덱스며.. 프로시져.. 트리거.. 속도개선을 위한 튜닝작업 한번 하자면...아웅~~ @_@)

아래의 방법처럼 배열을 이용하여 DB Insert 작업을 하면 데이터를 읽어서 하나하나 Insert 때리고 있는거 보다 시간이 초절약된다.
fscanf로 파일 내용을 읽어서 배열에 잘 저장한 다음 Insert를 한번만 해주면 쑤욱 입력되어 버리는..간단한 프로그램이지만.. 그 효과는 실로 놀랍다.
200만건 이상의 자료를 하나씩 Insert 하였을 때 1시간 반이 걸리던 작업이 배열을 사용하여 1000건씩 끊어 Insert 할 경우 2~3분이면 끝이 난다.. 브라보~

아.. 암만해도.. 올해는 대용량 데이터베이스처리와 관련한 공부를 좀 하긴 해야할 듯.. -_-;;;

/* 배열을 이용한 삽입 예제 */
#include

/***************************************************************
This is is a sample Pro*C program which uses the FOR option
by inserting records into the EMP table.
***************************************************************/
EXEC SQL BEGIN DECLARE SECTION;
   VARCHAR uid[20];
   VARCHAR pwd[20];
   int empno[100];
   VARCHAR ename[100][15];
   VARCHAR job[100][10];
   VARCHAR hiredate[100][9];
   float sal[100];
   int deptno[100];
   int loop;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA;

FILE *fp;

void main(void)
{
   int i;
   int fsret;

   /* log into ORACLE */
   strcpy(uid.arr, "SCOTT");                /* copy the user name */
   uid.len = strlen(uid.arr);
   strcpy(pwd.arr, "TIGER");                /* copy the password */
   pwd.len = strlen(pwd.arr);
   EXEC SQL WHENEVER SQLERROR GOTO errrpt;
   EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
   printf("Connected to ORACLE user : %s\n\n\n", uid.arr);
   if((fp = fopen("test.dat", "r")) == NULL)
   {
     printf("Error opening file test.dat \n");
     exit(1);
   }
   while(1)
   {
     for(i = 0; i < 100 ; i++)
     {        
        fsret = fscanf(fp, "%d %s %s %s %f %d",
                &empno[i], ename[i].arr, job[i].arr, hiredate[i].arr,
                &sal[i], &deptno[i]);
        
        if(fsret == EOF)
           break;
        if(fsret == 0)
        {
           printf("Incompatible field on the line. \n");
           exit(1);
        }
        ename[i].len = strlen(ename[i].arr);
        job[i].len = strlen(job[i].arr);
        hiredate[i].len = strlen(hiredate[i].arr);
     }
     loop = i;
     EXEC SQL FOR :loop
        INSERT INTO EMP(empno, ename, job, hiredate, sal, deptno)
        VALUES(:empno, :ename, :job, :hiredate, :sal, :deptno);
    
     EXEC SQL COMMIT WORK;
     printf("%d rows inserted. \n", sqlca.sqlerrd[2]);
     if(loop < 100)
        break;
   }
   printf("File test.dat loaded. \n");
   EXEC SQL WHENEVER SQLERROR CONTINUE;
   EXEC SQL COMMIT work RELEASE;
   exit(0);

   errrpt:
     printf("\n %70s \n", sqlca.sqlerrm.sqlerrmc);
     EXEC SQL ROLLBACK WORK RELEASE;
     exit(1);
}

 

Permanentlink | Trackbacks | Comments(10)  
http://ayarin.cafe24.com/tt/rserver.php?mode=tb&sl=226
짧지만 긴 답글!!!
acaran_ 09/02/12 21:39 R X
옹.. 신기하당 ㅋㅋㅋ
09/02/25 19:43 X
ㅎㅎ 니가 신기하다고 하는게 더 신기해~ --;;
노헝그리_ 09/02/19 16:36 R X
Insert Query로 DB에 넣는거보다, File Dump로 DB에 넣는게 속도가 더 나은... 그런 원리랑 같은 것인가?!
09/02/25 19:43 X
ㅇㅇ 그렇다고 할수있지..
KID_ 09/02/23 16:09 R X
요런.. 어렵고 머리 아픈거 말고..
당신 사진 좀 올려~-_-;
아님, 학교에 좀 놀러 오든가~
09/02/25 19:44 X
ㅎㅎ
원두선배 결혼식때 볼 수 있지 않을까? ^_^
마틴_ 09/05/18 21:06 R X
난 왜 이 글을 이제사 본거지?
투덜쓰_ 09/06/08 23:16 R X
뭐고 저 정신없는 것들은 ;;;
오랜만에 왔더니만 문전박대군 ㅋㅋㅋ
Missbae_ 09/06/29 23:39 R X
진짜 삭.막 하다...ㅋㅋㅋ

신밧드_ 09/07/13 09:02 R X
안녕하세요.. 글 보러 와서 사진만 보다 갑니다
Write Comment  
Name
Pass
Home
 


[1][2][3][4][5][6][7][8][9] ... [191]
<< PREV | NEXT >>

 

 

 

▒ 맹~ ▒ 's 블로그
To Know You is To Love You

  View Category
분류 전체보기 (191)
Diary (108)
Journey (25)
Study (37)
Infomation (6)
Culture (8)
Etc (7)

  Calender
<<   2009 Nov   >>
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293012345







Get RSS Page XML RSS2.0
Powered By TatterTools
Skin By Leezche from plyfly.net

Total : 296562
Yesterday : 110
Today : 113

Recent Articles
눈을 뜨다!! (11)
▶◀ [근조] 당신이 그.. (3)
Array를 이용한 다중 DB .. (10)
대학원생이신가요? (9)
[2008년 오사카,교토,고.. (1)
[2008년 오사카,교토,고.. (4)
[2008년 오사카,교토,고.. (6)
프로야구 시즌이 돌아.. (6)
[EJB] Servlet-Web 기본
[EJB] Basic Technology
Recent Replies
우왕~ 말로만 듣던... 그..
11/11 - KID
말만 듣고 있어도.... 오..
10/30 - 마틴
새로운 세상이겠네..ㅎ..
10/27 - Missbae
응~ 엄청 겁먹었었는데..
10/26 - 맹
오~~ 언니 고민하시더니..
10/23 - 레나^^
Recent Trackbacks
노무현 전 대통령 서거..
마틴블로그 닷 넷
너도사라~!
jalnaga's Blog
내 도메인의 가치
날자, 허리휜나비!!!
내 도메인은 얼마일까?
+ 。。언제나 맑음 。。+
내 도메인의 가치는 ? ..
▒ UnlimiTCode Blog™ ▒
Favorite Link
+ 。。언제나 맑음 ..
+ 미스터트롤의 개인..
::투덜:: MonOloguE
ACARAN BLOG & GALLERY
heejooya.com▒Happy Now▒..
ICESUN=
jalnaga's Blog
Kbckbc's Blog
Narae's 觀照處 Ver..
The Winner Takes It All
UnlimiTCode Blog™ @ T..
[ Martin Blog ]
▒ UnlimiTCode Home™ ▒..
今天你翔了吗?^_~오..
김영욱의 블로그
날자, 허리휜나비!!!
남현정의 T스토리
미스터트롤의 영혼..
박현정 홈피
시원한 하늬바람
조각구름 BLOG
차의영 교수님