Informix : 마지막 삽입 된 레코드의 ID를 얻는 방법
문제
삽입문 후 직렬 열의 값을 얻는 가장 효율적인 방법은 무엇입니까? 즉, 복제 방법을 찾고 있습니다 @@IDENTITY
또는 SCOPE_IDENTITY
MS SQL의 기능
해결책
마지막 직렬 삽입물의 값은 SQLERRD 어레이의 두 번째 항목으로 SQLCA 레코드에 저장됩니다. Brian의 대답은 ESQL/C에 맞지만 사용중인 언어를 언급하지 않았습니다.
저장된 절차를 작성하는 경우 값을 다음과 같이 찾을 수 있습니다.
LET new_id = DBINFO('sqlca.sqlerrd1');
또한 찾을 수 있습니다 $sth->{ix_sqlerrd}[1]
DBI를 사용하는 경우
다른 언어/인터페이스에는 변형이 있지만 아이디어를 얻을 것이라고 확신합니다.
다른 팁
나는 이것이 사용 된 것을 보았다.
if LOCAL_SQLCA^.sqlcode = 0 then
/ return serial */
Result := LOCAL_SQLCA^.sqlerrd[1]
else
/* return error code */
Result := -(Abs(LOCAL_SQLCA^.sqlcode));
나는 "효율적"이 당신이 여기서 찾고있는 단어라고 생각하지 않습니다. 정확성의 문제입니다. 나는 온라인에서 SQL Books가 할 수있는 것보다 더 나은 일을 할 수 있는지 확신 할 수 없지만 일반적으로, 당신이하고있는 일을 정말로 알고 있고 @@ Identity를 사용하는 특정한 이유가 없다면, scope_identity를 사용하십시오. 이에 대한 가장 분명한 이유는 @@ Identity가 테이블에 트리거가 첨부 된 경우 프로그램/SP/등이 추가 한 최신 레코드의 ID를 반환하지 않기 때문입니다. 또한 두 개의 트랜잭션이 동시에 발생하고 다음이 발생하는 대량 응용 프로그램에 문제가있을 수 있습니다 ...
- 삽입
- 다른 사용자의 삽입
- 다른 사용자의 신원을 귀하에게 반환하십시오
OP는 어떤 버전의 Informix가 사용되는지를 지정하지 않았으므로 다른 답변이있을 수 있습니다.