오라클과 알티베이스의 실행 시간 에러 처리를 위한 SQLSTATE, SQLCODE, SQLCA 값의 차이점을 비교한다.
-
내장 SQL문의 수행 결과를 저장하는 구조체로서 알티베이스에서 사용하는 구성 요소는 sqlcode, sqlerrm.sqlerrmc, sqlerrm.sqlerrml, sqlerrd[2]이며 오라클의 SQLCA에만 존재하고 알티베이스에서 지원하지 않는 구성 요소는 사용할 수 없다.(e.g sqlwarn)
- SQLCA의 선언
-
-
오라클
EXEC SQL INCLUDE SQLCA;
또는
#include <sqlca.h>
-
알티베이스
별도의 선언없이 사용할수 있다.
-
- sqlca.sqlcode 상태값
-
-
오라클
Status Code Description 0 SUCCESS >0 No row returned <0 database, system, network , application error -
알티베이스
Status Code Description SQL_SUCCESS SUCCESS SQL_SUCCESS_WITH_INFO SQL_NO_DATA No row returned SQL_ERROR SQL_INVALID_HANDLE
-
- sqlca.sqlerrm
-
오라클과 알티베이스에서 sqlerrmc, sqlerrml은 용도와 사용법이 동일하다.
- sqlca.sqlerrd[2]
-
-
오라클
INSERT/UPDATE/DELETE/SELECT INTO 연산에 의해 영향받은 레코드 개수(누적 레코드 개수)
-
알티베이스
INSERT /UPDATE /DELETE 연산에 의해 영향받은 레코드 개수
SELECT 문이나 fetch문 수행시 출력 호스트 변수가 배열일 때 리턴되는 레코드 개수
-
-
SQLSTATE에는 상태 코드가 저장되며 이 상태 코드를 통해 에러와 예외 상황의 종류를 알 수 있다.
- SQLSTATE의 선언과 사용
-
-
오라클
전처리기의 명령행 옵션으로 MODE=ANSI를 선언하고 사용
char SQLSTATE[6];
-
알티베이스
별도의 선언 없이 사용한다.
-
- SQLSTATE의 상태 코드
-
오라클과 알티베이스의 SQLSTATE 상태 코드는 그 의미와 코드값이 다르므로 코드 테이블에 따라서 변환되어야 한다.
-
SQLCODE에는 내장 SQL문 수행 후 에러 코드가 저장된다.
- SQLCODE의 선언과 사용
-
-
오라클
전처리기의 명령행 옵션으로 MODE=ANSI를 선언하고 사용
long SQLCODE;
-
알티베이스
별도의 선언 없이 사용할수 있다.
알티베이스에서의 SQLCODE의 자료형은 int 형이다.
-
- SQLCODE의 상태코드값
-
-
오라클
sqlca.sqlcode와 동일한 상태 코드 값이 저장된다.
-
알티베이스
Status Code Description 0 내장 SQL문을 성공적으로 수행한 경우. 즉, sqlca.sqlcode 값이 SQL_SUCCESS 인 경우 1 내장 SQL문을 수행하였으나 예외 상황이 발견된 경우. 즉, sqlca.sqlcode 값이 SQL_SUCCESS_WITH_INFO 인 경우 100 SELECT문이나 FETCH문 수행 후 리턴되는 레코드가 없는 경우. 즉, sqlca.sqlcode 값이 SQL_NO_DATA인 경우 -1 내장 SQL문 수행 시 에러가 발생하였지만 해당 에러코드가 없는 경우. 이 때의 sqlca.sqlcode 값은 SQL_ERROR 이다. -2 데이터베이스 서버와 연결하지 않고 내장 SQL문을 수행한 경우, 즉, sqlca.sqlcode 값이 SQL_INVALID_HANDLE 인 경우 위의 값 이외에 SQLCODE에 설정되는 경우는 에러 메시지가 있는 경우로서 해당 SQL에서 에러가 발생한 경우이다. [출처] sqlca.sqlcode 값의 정리|작성자 choibs777
-