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
운영게시판
최근게시물
Informix Q&A 360 게시물 읽기
No. 360
Insert 후 serial column 의 값 알아내기; sqlca.sqlerrd[1]
작성자
그리움
작성일
2000-11-03 19:16
조회수
6,929

INSERT 후 SERIAL 칼럼의 값 알아내기 ;

sqlca.sqlerrd[1]

 

Q4 INSERT 문을 실행 후 SERIAL로 지정한 칼럼의 값이 자동으로 채워지는 것으로 알고 있는데요, INSERT 후 다시 SELECT 하는 방법 외에 그 serial값을 알 수 있는 방법이 있습니까?

 

 

A 우선 결론부터 말씀드리자면, select를 하지 않고도 insert 후 serial 값을 확인할 수 있습니다.

Informix의 sqlca.h 라는 header file에 sqlca라는 structure가 있습니다. 아마도 ESQL/C나 4GL로 프로그램을 작성하신 적이 있으시다면 sqlca.sqlcode라는 값을 사용하여 error를 check하는 방법을 사용해 보신 적이 있을 것입니다.

 

sqlca.sqlcode가 sqlca structure 중에서 가장 많이 쓰이는 값일 것입니다. sqlca structure에는 sqlca.sqlcode 외에도 sqlerrd 라는 long type의 array도 포함되어 있습니다. 이 array 값에는 여러가지의 정보를 저장하게 되는데, 대표적인 것으로는

 

처리된 행의 갯수,

ISAM 오류 code,

insert 후의 serial 값과

insert 후의 rowid

등을 꼽을 수 있습니다. select를 사용하지 않고서도 바로 이 sqlerrd를 이용하여 insert된 후의 serial 값을 알아낼 수 있겠지요.

 

sqlca.sqlerrd[1]의 값이 바로 insert 후의 serial 값이 됩니다.

 

한 가지 주의해야 할 사항은 sqlca structure에는 "바로 이전에 실행된 SQL 구문에 대한 정보"를 저장하게 되어 있으므로 insert 문을 실행한 바로 다음에서 sqlca.sqlerrd[1]의 값을 확인하셔야 합니다.

 

더 자세한 내용은 $INFORMIXDIR/incl/esql/sqlca.h 를 참고하십시오.

 

다음은 demo 프로그램을 수정하여 간단하게 작성한 ESQL/C 예제 프로그램입니다.

 

#include <stdio.h>

 

$include sqlca.h;

 

EXEC SQL define FNAME_LEN 15;

EXEC SQL define LNAME_LEN 15;

 

main()

{

EXEC SQL BEGIN DECLARE SECTION;

char fname[ FNAME_LEN + 1 ];

char lname[ LNAME_LEN + 1 ];

int cust_num,cust_num1;

EXEC SQL END DECLARE SECTION;

 

EXEC SQL WHENEVER ERROR STOP;

EXEC SQL connect to 'stores7';

 

EXEC SQL insert into customer (customer_num, fname, lname)

values(0,"byrhee","byrhee");

 

if (sqlca.sqlcode == 0)

printf("After a row was inserted, the Serial # is %d.\n",

sqlca.sqlerrd[1]);

 

cust_num1=sqlca.sqlerrd[1];

 

EXEC SQL select customer_num, fname, lname

into :cust_num,:fname,:lname from customer

where customer_num=:cust_num1;

 

printf("%d %s %s\n",cust_num,fname, lname);

}

[Top]
No.
제목
작성자
작성일
조회
363ESQL/C 를 이용한 multi-connection
그리움
2000-11-03
5462
362"Must be dbsa to run this program." 또는 -951 오류
그리움
2000-11-03
5235
361-256 오류: 데이터베이스 로깅 모드 변경 [1]
그리움
2000-11-03
5938
360Insert 후 serial column 의 값 알아내기; sqlca.sqlerrd[1]
그리움
2000-11-03
6929
359ASP; TEXT 자료형에 자료입력하기.
그리움
2000-11-03
4934
358데이터베이스에서 몇몇 테이블의 크기를 SQL 로 구할수 있나.
그리움
2000-11-03
5311
357[질문] informix jdbc는 어디서.......
neverstop
2000-11-03
5275
365┕>Re: [질문] informix jdbc는 어디서.......
정재익
2000-11-03 21:37:02
5760
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다