1. SUNDB ESQL-C
1.1. 변수명에 사용할 수 없는 단어
__func__, _alignof, _bool, _complex, _imaginary, allocate, at, atomic, auto, autocommit, binary, boolean, char, const, context, continue, date, day, default, do, double, enum, extern, float, for, found, free, goto, goto, hour, include, inline, int, interval, long, longvarbinary, longvarchar, minute, month, month, not, number, off, offset, on, option, register, restrict, second, short, signed, sizeof, sql_context, sqlerror, sqlwarning, static, stop, struct, time, timestamp, timezone, to, typedef, union, unsigned, use, varbinary, varchar, void, volatile, whenever, while, with, year |
1.2. 시간설정을 위한 값
sysdate 는 sysdate, systime, systimestamp등으로 변경 해야 합니다. |
1.3. EXEC SQL INCLUDE SQLCA;
gc 파일에 SQLCA를 include 합니다. "#define SQLCA_STORAGE_CLASS extern" 문장은 SQLCA의 중복 include를 방지 하기 위해 사용 합니다.
#define SQLCA_STORAGE_CLASS extern EXEC SQL INCLUDE SQLCA; |
1.4. EXEC SQL DECLARE cur_name CURSOR
EXEC SQL DECLARE 절이 소스 코드의 위치에서 OPEN, FETCH, CLOSE보다 이전에 코딩이 되어 있어야 하고, 같은 파일 내에 존재 해야 합니다.
EXEC SQL DECLARE cur_name CURSOR FOR .. EXEC SQL OPEN cur_name; EXEC SQL FETCH cur_name INTO … EXEC SQL CLOSE cur_name; |
1.5. SESC_DECLARE
SESC_DECLARE 절이 사용된 경우는 define문을 사용하여 회피 합니다.
1.5.1. As-Is 코드
#define SESC_DECLARE #ifdef SESC_DECLARE typedef struct _st_Code { int code_id; char code_name[8]; } #endif |
1.5.2. To-Be 코드
#ifdef SUNDB_GPEC EXEC SQL BEGIN DECLARE SECTION; typedef struct _st_Code { int code_id; char code_name[8]; } EXEC SQL END DECLARE SECTION; #else // SUNDB_GPEC typedef struct _st_Code { int code_id; char code_name[8]; } #endif // SUNDB_GPEC |
1.6. EXEC SQL BEGIN 과 END DECLARE 사이의 define문 불가
변수 선언문 또는 구조체의 선언문 외에 매크로는 사용할 수 없습니다.
1.6.1. As-Is 코드
EXEC SQL BEGIN DECLARE SECTION; ... #define CODE_VALUE 8 … EXEC SQL END DECLARE SECTION; |
1.6.2. To-Be 코드
#define CODE_VALUE 8 EXEC SQL BEGIN DECLARE SECTION; ... EXEC SQL END DECLARE SECTION; |
2. EXEC SQL ATOMIC FOR
ATOMIC문은 현재 지원하지 않습니다.
2.1.1. As-Is 코드
EXEC SQL ATOMIC FOR .. |
2.1.2. To-Be 코드
EXEC SQL FOR .. |
3. Cursor
3.1. Scroll cursor
149 EXEC SQL DECLARE CS_SQL SCROLL CURSOR FOR SELECT * FROM BJDSISE WHERE COD2 = :cod2; 150 151 EXEC SQL OPEN CS_SQL; 152 153 EXEC SQL FETCH CS_SQL INTO :bjdsise; 154 155 for ( ii = 0; ii < icnt; ii++) 156 { 157 EXEC SQL FETCH CURRENT CS_SQL INTO :bjdsise; 158 159 if (sqlca.sqlcode == SQL_SUCCESS) 160 { 161 } 162 else if (sqlca.sqlcode == SQL_NO_DATA) 163 { 164 printf("[%s] no data \n", arg->name); 165 break; 166 } 167 else 168 { 169 error(arg->name, sqlca); 170 break; 171 } 172 } 173 174 EXEC SQL CLOSE CS_SQL; |
3.2. Cursor
149 EXEC SQL DECLARE CS_SQL CURSOR FOR SELECT * FROM BJDSISE WHERE COD2 = :cod2; 150 151 EXEC SQL OPEN CS_SQL; 152 155 for ( ii = 0; ii < icnt; ii++) 156 { 157 EXEC SQL FETCH CS_SQL INTO :bjdsise; 158 159 if (sqlca.sqlcode == SQL_SUCCESS) 160 { 161 } 162 else if (sqlca.sqlcode == SQL_NO_DATA) 163 { 164 printf("[%s] no data \n", arg->name); 165 break; 166 } 167 else 168 { 169 error(arg->name, sqlca); 170 break; 171 } 172 } 173 174 EXEC SQL CLOSE CS_SQL; |