반응형

수행 결과 및 상태 코드

오라클과 알티베이스의 실행 시간 에러 처리를 위한 SQLSTATE, SQLCODE, SQLCA 값의 차이점을 비교한다.

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에는 상태 코드가 저장되며 이 상태 코드를 통해 에러와 예외 상황의 종류를 알 수 있다.

SQLSTATE의 선언과 사용
  • 오라클

    전처리기의 명령행 옵션으로 MODE=ANSI를 선언하고 사용

    char SQLSTATE[6];

  • 알티베이스

    별도의 선언 없이 사용한다.

SQLSTATE의 상태 코드

오라클과 알티베이스의 SQLSTATE 상태 코드는 그 의미와 코드값이 다르므로 코드 테이블에 따라서 변환되어야 한다.

SQLCODE

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에서 에러가 발생한 경우이다.

+ Recent posts