Q3 ESQL/C 프로그램을 작성하려 하는데, 두개의 DB Server에 CONNECT해야 할 필요가 있습니다. multi connection이 가능한가요?
A 가능합니다. 다음의 간단히 작성한 프로그램을 참고하십시오.
#include <stdio.h>
$include sqlca.h;
$include locator.h;
main()
{
int i=0;
$char code[2 + 1];
$char sname[15 + 1];
printf("Sample ESQL Program running.\n");
$connect to 'stores7@byrhee_731t' as 'con_1';
if (SQLCODE != 0) {
printf("byrhee_731t DB connect error(%d)\n",
sqlca.sqlcode);
exit(1);
}
printf(" byrhee_731t DB connect success(%d)\n",
sqlca.sqlcode);
$connect to 'stores7@maserv_tcp' as 'con_2';
if (SQLCODE != 0) {
printf("maserv_tcp DB connect error(%d)\n",
sqlca.sqlcode);
exit(1);
}
printf("maserv_tcp DB connect success(%d)\n",
sqlca.sqlcode);
$declare sel_cursor cursor for
select code, sname into $code, $sname
from state;
if (SQLCODE != 0) {
printf("declare cursor error(%d)\n", sqlca.sqlcode);
exit(1);
}
printf("declare cursor success(%d)\n", sqlca.sqlcode);
$open sel_cursor;
if (SQLCODE != 0) {
printf("cursor open error(%d)\n", sqlca.sqlcode);
exit(1);
}
printf("cursor open success(%d)\n", sqlca.sqlcode);
for (;;)
{
$set connection 'con_2';
if (SQLCODE != 0) {
printf("set connection maserv_tcp error (%d)\n",
sqlca.sqlcode);
exit(1);
}
printf("set connection maserv_tcp success (%d) : SELECT\n",
sqlca.sqlcode);
$fetch sel_cursor;
if (SQLCODE == SQLNOTFOUND)
break;
$set connection 'con_1';
if (SQLCODE != 0) {
printf("set connection byrhee_731t error (%d)\n",
sqlca.sqlcode);
exit(1);
}
printf("set connection byrhee_731t success (%d) :
INSERT \n", sqlca.sqlcode);
$insert into state values ($code, $sname);
if (SQLCODE != 0) {
printf("insert error(%d)\n", sqlca.sqlcode);
exit(1);
}
printf("insert success(%d)\n", sqlca.sqlcode);
i=i+1;
} /* end for-loop */
printf("%d 행이 insert 되었습니다.\n",i);
$close sel_cursor;
if (SQLCODE != 0) {
printf("close sel_cursor error(%d)\n", sqlca.sqlcode);
exit(1);
}
printf("sel_cursor closed(%d)\n", sqlca.sqlcode);
$free sel_cursor;
if (SQLCODE != 0) {
printf("free sel_cursor error(%d)\n", sqlca.sqlcode);
exit(1);
}
printf("sel_cursor freed(%d)\n", sqlca.sqlcode);
$disconnect 'con_1';
if (SQLCODE != 0) {
printf("disconnect byrhee_731t error(%d)\n",
sqlca.sqlcode);
exit(1);
}
printf(" byrhee_731t disconnected (%d)\n", sqlca.sqlcode);
$disconnect 'con_2';
if (SQLCODE != 0) {
printf("disconnect maserv_tcp error(%d)\n",
sqlca.sqlcode);
exit(1);
}
printf(" maserv_tcp disconnected (%d)\n", sqlca.sqlcode);
printf("\nSample Program over.\n");
} /* end of main() */
한 가지 주의할 점은 두 서버간의 환경변수 중 한 쪽 서버쪽에만 필요한 환경변수가 있다면 그 환경변수를 setting해주고 unset하는 작업이 꼭 필요하다는 점입니다. 다음과 같이 환경변수를 설정하는 내용으로 function을 만들어 이 function을 필요한 시점에 호출하여 실행하도록 하는 것이 좋습니다. 아래의 내용처럼 특히 ONCONFIG, LOCALE 변수와 INFORMIXSQLHOSTS 변수를 주의하십시오.
to_env1()
{
putenv("INFORMIXSERVER=byrhee_731t");
putenv("INFORMIXDIR=/CS1/IDS731UC");
putenv("ONCONFIG=onconfig.byrhee");
putenv("INFORMIXSQLHOSTS=/CS1/byrhee/sqlhosts");
putenv("DB_LOCALE=en_us.8859-1");
putenv("SERVER_LOCALE=en_us.8859-1");
putenv("CLIENT_LOCALE=en_us.8859-1");
}
to_env2()
{
putenv("INFORMIXSERVER=maserv_tcp");
putenv("INFORMIXDIR=/post01/Product/ON724UC1");
putenv("ONCONFIG=onconfig.csdb");
putenv("INFORMIXSQLHOSTS=/post01/Product/ON724UC1/etc/sqlhosts");
putenv("DB_LOCALE=ko_kr.ksc");
putenv("SERVER_LOCALE=ko_kr.ksc");
putenv("CLIENT_LOCALE=ko_kr.ksc");
}
|