database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 3010 게시물 읽기
No. 3010
DB2 C 프로그래밍 질문입니다.
작성자
이광진(orionprince)
작성일
2010-09-14 18:17ⓒ
2010-09-14 18:21ⓜ
조회수
8,362

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;

}

이 글에 대한 댓글이 총 2건 있습니다.

자답입니다.

글올리고 다시 테스트 해보니

전화번호 길이가 너무 길어서 short 타입에는 안들어 가네요.

sqlint32로 다시 선언하니 잘 되네요.

db2의 데이터 타입과 선언해야 하는 데이터 타입이

좀 상이해서 사용하는데 제한이 있네요.

혹시 이런거 어디에 정리되어 있는지 아시는 분 계실까요?

이광진(orionprince)님이 2010-09-14 18:30에 작성한 댓글입니다.

 

http://www.kdug.kr/에서

오라클 사용자를 위한 DB2 9.7 가이드북 version 2 pdf책자 보시면

datatype 오라클과 비교해 보기 쉽게 나와있어요.

MAX_chobo님이 2010-09-16 15:10에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3013VARCHAR_FORMAT 질문 입니다. [1]
찌원
2010-10-02
7550
3012DB2 C 프로그래밍 CURSOR 질문입니다. [1]
이광진
2010-09-29
7142
3011db 데이터를 엑셀로 export 시키는 방법 있을까염? [1]
둥둥
2010-09-16
8164
3010DB2 C 프로그래밍 질문입니다. [2]
이광진
2010-09-14
8362
3009DB 저장시 오류..
김관중
2010-09-13
8091
3008DB2/AIX62 v9.1 사용할수있는 jdbc는 어떤걸 써야하나요 ..
김광용
2010-09-10
6987
3007윈도우용 db2 소프트웨어가 필요합니다. [2]
박남일
2010-09-07
14543
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.052초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다