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 구현|작성자 한나사랑
[출처] UNIX Thread 프로그램에서 Pro*C 구현|작성자 한나사랑
반응형
'배워야 산다 > Pro-c' 카테고리의 다른 글
EXEC SQL COMMIT 및 ROLLBACK 옵션정리 (0) | 2013.01.24 |
---|---|
thread 를 이용한 pro*c (proc) 공식 예제 (0) | 2013.01.24 |