C로 DB2의 데이터 입출력 프로그램을 만드는 중입니다.
DB2의 info center에서 샘플을 보고 아래의 코드를 작성해 봤습니다.
중간에 구조체 멤버 변수에 값을 넣는 것은 되는데
CURSOR FETCH가 안되네요.
Fetch Cursor Fail... ===> -304 이 에러가 발생하는데
값의 데이터 타입이 맞지 않는다는 에러같은데
위에서 구조체의 멤버 변수에 값을 넣을 때는 문제없이 되거든요.
이거 왜 이럴까요? 제가 뭘 놓치고 있는 걸까요?
아시는 분의 답변 부탁드립니다.
테이블입니다.
CUST_NO |
0 |
INTEGER |
CUST_NM |
1 |
VARCHAR(30) |
CUST_TEL |
2 |
INTEGER |
소스입니다.
EXEC SQL BEGIN DECLARE SECTION;
struct str_t{
short cust_no;
short cust_tel;
}s1;
sqlint16 d1;
sqlint32 d2;
short d3;
char c1[10];
char c2[10];
EXEC SQL END DECLARE SECTION;
int TB_INSERT(void)
{
struct sqlca sqlca;
int idx=0;
typedef struct str_t STR_TEST;
STR_TEST str_test;
STR_TEST get_str[10];
memset(get_str, 0x00, sizeof(get_str)*10);
EXEC SQL SELECT cust_no INTO :s1.cust_no
from lm_gis.str_test where cust_no=12345;
if(SQLCODE != SQLOK)
{
printf("Select Struct Fail... ===> %d\n", SQLCODE);
return FALSE;
}
else
{
printf("Select Struct Success... : %d\n", s1.cust_no);
}
EXEC SQL DECLARE cur1 CURSOR FOR
select cust_no, cust_tel from lm_gis.str_test FOR FETCH ONLY;
EXEC SQL OPEN cur1;
if(SQLCODE != SQLOK)
{
printf("Open Cursor Fail... ===> %d\n", SQLCODE);
return FALSE;
}
else
{
printf("Open Cursor Success...\n");
}
while(1)
{
EXEC SQL FETCH cur1 into :s1;
if(SQLCODE != SQLOK)
{
printf("Fetch Cursor Fail... ===> %d\n", SQLCODE);
return FALSE;
}
else
{
printf("Fetch Cursor Success...\n");
}
memcpy(&get_str[idx], &s1, sizeof(s1));
printf("%d : %d : %d\n", idx, get_str[idx].cust_no, get_str[idx].cust_tel);
idx++;
}
return 0;
} |