부록 C. 오류 코드#
SQLError는 X/Open 및 SQL Access Group SQL CAE 규격(1992)과 ODBC 스펙에서 정의한 대로 SQLSTATE 값을 반환한다. SQLSTATE 값은 다섯 문자를 포함하는 문자열이다. 이 부록에서는 Altibase CLI와 ODBC를 위한 SQLSTATE 값을 설명한다.
SQLSTATE#
다음 테이블은 Altibase CLI 드라이버의 SQLError가 반환할 수 있는 SQLSTATE 값을 표시한다.
SQLSTATE | Error | Can be returned from |
---|---|---|
01004 | 자료가 잘림 (반환 될 값의 크기가 주어진 버퍼의 크기보다 클 경우) |
SQLDescribeCol SQLFetch SQLGetData |
07006 | 제한된 데이터 타입 속성 위반 | SQLBindParameter SQLExecute SQLFetch |
07009 | 유효하지 않은 설명자 인덱스 | SQLBindCol SQLBindParameter SQLColAttribute SQLDescribeCol SQLDescribeParam SQLGetData |
- SQLSTATE 08001, 08002, 08003, 08S01은 아래 참고
SQLSTATE | Error | Can be returned from |
---|---|---|
HY000 | 일반 오류 | SQLAllocStmt SQLAllocConnect SQLBindCol SQLBindParameter SQLColAttribute SQLColumns SQLConnect SQLDescribeCol SQLDisconnect SQLDriverConnect SQLEndTran SQLExecDirect SQLExecute SQLFetch SQLFreeHandle SQLFreeStmt SQLGetData SQLNumParams SQLNumResultCols SQLPrepare SQLPrimaryKeys SQLProcedureColumns SQLProcedures SQLRowCount SQLSetAttribute SQLSetConnectAttr SQLSetEnvAttr SQLStatistics SQLTables |
HY001 | 메모리 할당 오류 (ODBC가 함수를 실행하고 완료하기 위해 요구된 메모리를 할당할 수 없음) |
SQLAllocConnect SQLAllocStmt SQLBindCol SQLBindParameter SQLConnect SQLDriverConnect SQLExecDirect SQLGetTypeInfo SQLPrepare |
HY003 | 애플리케이션 버퍼 타입이 유효하지 않음 (cType 인자의 값이 유효한 C 데이터 타입이 아님) |
SQLBindCol SQLBindParameter |
HY009 | 유효하지 않은 인자 사용 (null pointer) |
SQLAllocConnect SQLAllocStmt SQLBindParameter SQLExecDirect SQLForeignKeys SQLPrimaryKeys SQLProcedureColumns SQLProcedures SQLSpecialColumns SQLStatistics SQLTablePrivileges |
HY010 | 함수 연속 오류 | SQLAllocStmt SQLDescribeParam SQLGetData |
HY090 | 유효하지 않은 문자열 또는 버퍼 길이 | SQLBindParameter SQLDescribeCol SQLExecute SQLForeignKeys SQLGetData SQLGetStmtAttr SQLTablePrivileges |
HY092 | 유효하지 않은 속성 또는 옵션 | SQLGetStmtAttr |
HY105 | 유효하지 않은 매개변수 타입 | SQLBindParameter |
HYC00 | 지원하지 않는 속성 사용 | SQLGetConnectAttr SQLGetStmtAttr |
데이터베이스 연결 관련 오류#
SQLSTATE | Code | Error | Can be returned from |
---|---|---|---|
HY000 | 0x51001 | Character set가 존재하지 않음 | SQLConnect SQLDriverConnect |
0x5003b | The communication buffer is insufficient. (통신 버퍼의 길이를 초과했음) |
SQLExecute | |
HY001 | 0x5104A | 메모리 할당 오류 (드라이버가 함수를 실행하고 완료하기 위해 요구된 메모리를 할당할 수 없음) |
SQLConnect SQLDriverConnect |
08001 | 0x50032 | 드라이버가 DB에 연결을 설정할 수 없음 | SQLConnect SQLDriverConnect |
네트워크 관련 오류#
SQLSTATE | Code | Error | Can be returned from |
---|---|---|---|
08002 | 0x51035 | 해당 dbc는 이미 DB에 연결 되 있음 | SQLConnect SQLDriverConnect |
08003 | 0x51036 | stmt가 연결 되지 않은 상태거나 연결이 끊어진 상태 | SQLExecDirect SQLExecute SQLPrepare |
08S01 | 0x51043 | 통신 회선 장애 (ODBC와 DB간에 함수 처리가 완료되기 전에 통신 회선 실패) |
SQLColumns SQLConnect SQLDriverConnect SQLExecDirect SQLExecute SQLFetch SQLForeignKeys SQLGetConnectAttr SQLPrepare SQLPrimaryKeys SQLProcedureColumns SQLProcedures SQLSetConnectAttr SQLSpecialColumns SQLStatistics SQLTablePrivileges SQLTables |
명령문 상태 전이#
다음 테이블들은 명령문 상태에서 해당 핸들 타입(environment, connection, 또는 statement)을 사용하고 있는 Altibase CLI 함수들이 호출됐을 때 각 상태들의 전환이 어떻게 되는지를 보여준다.
Altibase CLI 명령문들은 다음과 같은 상태를 갖는다.
State | Description |
---|---|
S0 | Unallocated statement. (The connection state must be connected connection.) |
S1 | Allocated statement. |
S2 | Prepared statement. (A (possibly empty) result set will be created.) |
S6 | Cursor positioned with SQLFetch. |
전환 테이블내에서의 각 entry 값은 다음 중 하나이다.
-
-- : 함수를 실행한 후 상태의 변환이 없는 경우
-
Sn : 명령문 상태가 특정 상태로 전환된 경우
-
(IH) : Invalid Handle
-
(HY010) : Function sequence error
-
(24000) :
Note)
S : Success. 이 경우 함수는 다음 값들 중 하나를 반환한다: SQL_SUCCESS_WITH_INFO 또는 SQL_SUCCESS.
E : Error. 이 경우 함수는 SQL_ERROR를 반환한다:
R : Results. 명령문을 수행했을 때 결과 집합이 있슴. (결과 집합은 empty set 일 가능성이 있다.)
NR : No Results. 명령문을 수행했을 때 결과 집합이 없슴.
NF : No Data Found. 함수는 SQL_NO_DATA를 반환한다.
RD : Receive Done
P : Prepared. The statement was prepared.
NP : Not Prepared. The statement was not prepared.
예를 들어 다음은 SQLPrepare 함수에 대한 statement state transition table을 보는 방법이다.
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | S => S1 | S => S2 | (24000) |
E => S1 |
핸들 타입이 SQL_HANDLE_STMT 이며 명령문 상태가 S0 일 때 SQLPrepare 함수가 불려진 경우, -SQL_INVALID_HANDLE (IH)이 반환된다. 핸들 타입이 SQL_HANDLE_STMT 이고 상태가 S1일 때는 불려진 함수 SQLPrepare가 성공적으로 수행되면 S1 상태를 그대로 유지한다. 핸들 타입이 SQL_HANDLE_STMT 이고 S2인 상태에서 SQLPrepare 함수가 불렸을 때 그 함수가 성공적으로 수행되면 명령문의 상태는 S2로 전환되고 수행에 실패를 했을 경우 명령문의 상태는 S1 상태 그대로 남아있다. 핸들 타입이 SQL_HANDLE_STMT인 S6 상태에서 함수가 불리우면 항상 SQL_ERROR와 SQLSTATE 24000 (Invalid Cursor State)이 반환된다.
SQLAllocHandle#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
-- | -- | -- | -- |
S1* |
* HandleType이 SQL_HANDLE_STMT인 경우
SQLBindCol#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | -- | -- | -- |
SQLBindParameter#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | -- | -- | -- |
SQLColumns, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures, SQLStatistics, SQLTables#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | S => S6 | E => S1 | (24000) |
S => S6 |
SQLConnect#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(Error) | (Error) | (Error) | (Error) |
SQLDisconnect#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
-- | * => S0 | * => S0 | * => S0 |
* 함수 SQLDisconnect를 부르면 연결 핸들과 연관된 모든 명령문들을 종료한다. 그리고, 이 함수는 연결 상태를 allocated connection 상태로 놓는다; 명령문 상태가 S0가 되기 전에 연결 상태는 C4 (connected connection)이다.
SQLDriverConnect#
SQLConnect 참고
SQLExecDirect#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | S, NR => -- | S, NR => S1 | (24000) |
S, R => S6 | S, R => S6 | ||
E => S1 |
SQLExecute#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | (HY010) | S, NR => -- | (24000) |
S, R => S6 | |||
E => -- |
SQLFetch#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | (HY010) | (HY010) | S => -- |
SQLFreeHandle#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
-- | (HY010) | (HY010) | (HY010) |
(IH) | S0 | S0 | S0 |
- (1) 첫 번째 행은 handleType이 SQL_HANDLE_ENV 또는 SQL_HANDLE_DBC인 경우
- (2) 두 번째 행은 handleType이 SQL_HANDLE_STMT인 경우
SQLFreeStmt#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | -- | -- | NP = > S1 |
P => S2 | |||
(IH) | S0 | S0 | S0 |
- (1) 첫 번째 행은 fOption이 SQL_CLOSE인 경우
- (2) 두 번째 행은 fOption이 SQL_DROP인 경우
SQLGetData#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | (HY010) | (HY010) | S || NF => -- |
SQLGetTypeInfo#
SQLColumns 참고
SQLNumResultCols#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | (HY010) | S => -- | S => -- |
SQLPrepare#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | S => -- | S => -- | (24000) |
E => S1 |
SQLPrimaryKeys#
SQLColumns 참고
SQLProcedureColumns#
SQLColumns 참고
SQLProcedures#
SQLColumns 참고
SQLSetConnectAttr#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
--* | -- | -- | (24000) |
* 설정한 속성 (Attribute)이 연결 속성인 경우. 설정한 속성이 명령문 속성인 경우는 SQLSetStmtAttr 참고.
SQLSetEnvAttr#
S0 Unallocated | S1 Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(Error) | (Error) | (Error) | (Error) |
SQLSetStmtAttr#
S0 Unallocated | S1Allocated | S2 Prepared | S6 Infetch |
---|---|---|---|
(IH) | -- | (1) => -- | (1) => -- |
(2) => (Error) | (2) => (24000) |
-
(1) Attribute 인자가 SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_SIMULATE_CURSOR, SQL_ATTR_USE_BOOKMARKS, SQL_ATTR_CURSOR_SCROLLABLE, 또는 SQL_ATTR_CURSOR_SENSITIVITY이 아닌 경우
-
(2) Attribute 인자가 SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_SIMULATE_CURSOR, SQL_ATTR_USE_BOOKMARKS, SQL_ATTR_CURSOR_SCROLLABLE, 또는 SQL_ATTR_CURSOR_SENSITIVITY인 경우
SQLStatistics#
SQLColumns 참고
SQLTables#
SQLColumns 참고
상태 전이 테이블#
다음은 state transition에 영향을 미치는 주요 함수들을 요약한 것이다.
![]() |
S0 UNALLOCATED | S1 ALLOCATED | S2 PREPARED | S6 INFETCH |
---|---|---|---|---|
Prepare | (IH) | S => S1 | S => S2 | (24000) |
E => S1 | ||||
ExecDirect | (IH) | S,NR => S1 | S => S2 | (24000) |
S,R => S6 | S,R => S6 | |||
E => S1 | ||||
Execute | (IH) | (HY010) | S,NR => S2 | (24000) |
S,R => S6 | ||||
E => S2 | ||||
Fetch | (IH) | (HY010) | (HY010) | S => S6 |
FreeStmt (CLOSE) | (IH) | S1 | S2 | NP => S1 |
P => S2 | ||||
FreeStmt (DROP) | (IH) | S0 | S0 | S0 |
Cf )
- (IH) : Invalid Handle (HY010) : Function Sequence Error
- (24000) : Invalid Cursor State
- S : Success E : Error except Network Error
- R : Results NR : No Results NF : No data Found RD: Receive Done
- P : Prepared NP : Not Prepared