2011-10-12 3 views
3

OCI를 사용하여 C++ 코드의 테이블에 레코드를 하나씩 삽입하고 있습니다. 데이터는 구조체의 해시 맵에 있습니다. 구조체의 특성을 테이블의 레코드 열에 바인딩합니다 (예 :OCI를 사용하는 대량 삽입

삽입 쿼리 정의 OCIBindByname 지도를 통해 기록 반복 처리의 열 구조체 의 속성과 할당 바인드 변수 OCIStmtExecute 끝

이 꽤 느린, 그래서 대량 삽입을 수행하여 속도 싶습니다. 무엇을 할 수있는 좋은 방법입니다 하나의 OCIStmtExecute에 모든 레코드를 삽입하기 위해 구조체 배열을 사용해야합니까? 이것을 수행하는 방법을 보여주는 예제 코드가 있습니까?

답변

1

'벌크 삽입물'을 사용하고 싶을 것입니다. 배열의 대량 삽입은 첫 번째 행의 데이터를 배열의 첫 번째 구조와 바인딩하고 점프를 설정하는 ArrayBinds를 사용하여 수행됩니다. 일반적으로 구조의 크기입니다. 이 후에 배열의 개수로 명령문을 실행할 수 있습니다. 다중 바인드는 오버 헤드를 생성하므로 대량 삽입이 사용됩니다.

2

Here은 구현 한 방법을 보여주는 샘플 코드입니다 (OCI*ML). sizeof(int) × 행의 수와 그 이식의 메모리

  1. malloc() 블록 : 요약하면,이 작업을 수행하는 방법은 (정수 중 하나 열이있는 테이블에 대해 말)입니다. 이것은 배열이 될 수 있습니다.
  2. *valuep에 대한 포인터와 value_sz에 대한 포인터로 OCIBindByPos()을 호출하십시오. itersOCIStmtExecute()는 1 단계

의 행의 개수로 설정

  • 부름 experience 100 ×의 속도 증가는 확실히 제 가능하다.

  • 1

    떼어 먹다 삽입은 enter code here 에 의해 enter code here 을 example.txt {enter code here 분리 문자 = ','// 또는 분리 문자 텍스트 파일 enter code here 크기 = 2백킬로바이트 // 또는 텍스트 파일의 사이즈를 specifiedin enter code here } enter code here

    bilk insert example.txt 
     
    by 
     
    { 
     
    delimeter=',' // or any delimeter specifiedin your text files 
     
    size=200kb //or your size of text file 
     
    }

    enter code here