본문 바로가기
배워야 산다/Pro-c

Thread 프로그램에서 Pro*C 구현

by 인라인타지마 2013. 1. 24.

Thread 프로그램에서 Pro*C 를 사용하기 위해서는, 비Thread 프로그램에서 사용할 일 없는 몇가지를 사용해야 한다.

Thread 에서, Pro*C 를 사용하는 방법은 2가지가 있는데, 내가 한건 간단하게 각Thread별로 각자의 context를 사용하는 방법이다. 다른 하나의 방법은, 각Thread 가 1개의 Context 를 공유하는 방법이며, 또한 어렵지 않게 구현가능하리라 본다.

Pro*C precompile 옵션에, THREADS=YES 추가해서, Thread safe 하게 해줘야 함.
<sample>
PROCFLAGS= char_map=string parse=none THREADS=YES def_sqlcode=yes include=/usr/include


본문에서는 아래처럼, CONTEXT 를 사용해야 한다.
CONTEXT 구문이 없으면, 컴파일 자체가 안된다.
    EXEC SQL BEGIN DECLARE SECTION;
        SQL_CONTEXT ctx;
        VARCHAR db_user_id[20];
        VARCHAR db_password[20];
        VARCHAR tnsName[20];
       .....
    EXEC SQL END DECLARE SECTION;

    EXEC SQL CONTEXT ALLOCATE :ctx;
    EXEC SQL CONTEXT USE :ctx;
    EXEC SQL CONNECT :db_user_id IDENTIFIED BY :db_password USING :tnsName;
      ......
      SQL 작업 수행
      ......
    EXEC SQL COMMIT WORK RELEASE;
    EXEC SQL CONTEXT FREE :ctx;

* 밑에 EXEC SQL CONTEXT FREE :ctx; 를 해주지 않으면, 메모리 Leak 발생한다.

[출처] UNIX Thread 프로그램에서 Pro*C 구현|작성자 한나사랑

반응형