C를 통해 Informix에 액세스하는 레거시 응용 프로그램에서 다음 코드 단편을 볼 수 있습니다. 코드의 SQL이 달성하고자하는 것을 누구나 설명 할 수 있습니까? 감사.코드 조각에 대한 설명
EXEC SQL BEGIN DECLARE SECTION;
int i_tableref;
EXEC SQL END DECLARE SECTION;
/* Some code here */
if (!i_sel_ref)
{
exec sql begin declare section;
const char *sql1 =
"select refer_num.nextval from table (SET{''})";
exec sql end declare section;
exec sql prepare oref_sel_fid from :sql1;
if (sqlca.sqlcode != SQL_OK)
{
/* some code */
}
/* More code */
}
에서
your_seq_generator_name.nextval
를 선택 IDS의 최근 버전에는 'sysdual'과 같은 이름의 테이블이 있습니다. 나는 데이터베이스를 만들 때'dual'이라는 테이블을 만듭니다. 단일 엘리먼트 테이블의 전형적인 표현은 "SELECT refer_num.nextval FROM systables WHERE tabid = 1' '입니다 (또는 코드가 MODE ANSI 데이터베이스에서도 작동하도록한다면,'SELECT refer_num.nextval FROM"informix ".systables where tabid = 1' '). –또한 최신 버전의 IDS (실제로 시퀀스가있는 모든 버전의 IDS가 최신 버전 임)에서는 EXECUTE IMMEDIATE를 사용하여 코드 볼륨을 줄일 수 있습니다. –
적어도 개발자 중 한 명이 맞춤 sysdual에 하나 더 많은 가치를 추가하기로 결정한 이후로 (항상 tabid = 1 절을 사용하여) 'table (set {1})'접근법이나 Jonathan이 언급 한 접근법을 선호했습니다 우리가 만든 테이블, 코드 폭탄의 다양한 조각의 결과로 ... – calvinkrishy