콘텐츠로 이동

부록 B. 데이터형#

이 부록은 Altibase의 데이터 타입과 SQL 데이터 타입, C 데이터 타입의 종류를 설명하고, 각각의 데이터 타입간에 변경이 가능한지 여부를 나타낸다.

SQL 데이터형#

ODBC 드라이버와 Altibase CLI가 Altibase SQL 데이터 타입을 ODBC 스펙에 정의된 SQL type 식별자들에 어떻해 대응하는가에 대한 정보와 Altibase SQL 데이터 타입을 ODBC 스펙의 SQL type 식별자들에 어떻게 대응하는가에 대한 정보는 SQLGetTypeInfo()를 호출함으로서 반환된다.

ODBC 드라이버와 Altibase CLI가 어떤 데이터 타입을 지원하는가는 SQLGetTypeInfo()를 호출함으로서 알 수 있다.

다음 테이블은 Altibase CLI가 지원하는 SQL 데이터 타입들에 대한 유효한 SQL type 식별자들의 목록이다.

SQL type 식별자 ALTIBASE 데이터 타입 부연 설명
SQL_CHAR CHAR(n) 고정된 길이(n)의 데이터 타입
SQL_VARCHAR VARCHAR(n) 가변 길이의 데이터 타입:
FIXED로 선언했을 경우는 명시된 크기 만큼 저장소의 크기가 설정,
VARIABLE로 선언했을 경우는 명시된 크기 내에서 가변 길이를 가짐
SQL_WCHAR NCHAR(n) 고정된 길이(n)의 유니코드 문자형 데이터 타입.
N은 문자 개수임
SQL_WVARCHAR NVARCHAR(n) 가변 길이의 유니코드 문자형 데이터 타입:
FIXED로 선언했을 경우는 명시된 크기 만큼 저장소의 크기가 설정,
VARIABLE로 선언했을 경우는 명시된 크기 내에서 가변 길이를 가짐.
N은 문자 개수임
SQL_DECIMAL DECIMAL(p, s) NUMERIC 데이터 타입과 동일한 데이터 타입
SQL_NUMERIC NUMERIC(p, s) Precision과 scale을 가지는 숫자형 데이터 타입으로 precision 만큼의 유효 숫자와 scale 만큼의 소수점이하 정밀도를 가지는 고정 소수점형 (1<=p<=38, -84<=s <=126)
SQL_SMALLINT SMALLINT 2 bytes 크기의 데이터 타입 (-2^15+1 ~ 2^15-1)
SQL_INTEGER INTEGER 4 bytes 크기의 데이터 타입 (-2^31+1 ~ 2^31-1)
SQL_BIGINT BIGINT 8 bytes 크기의 데이터 타입 (-2^63+1 ~2^63-1)
SQL_REAL REAL C의 FLOAT과 동일한 데이터 타입
SQL_FLOAT FLOAT(p) -1E+120에서 1E+120까지의 부동 소수점 숫자 데이터 (1<=p<=38)
SQL_DOUBLE DOUBLE C의 DOUBLE과 동일한 데이터 타입
SQL_BLOB BLOB 최대 4GB-1Byte 길이를 가지는 가변길이 이진 데이터 타입
SQL_CLOB CLOB 최대 4GB-1Byte 길이를 가지는 가변길이 문자 데이터 타입
SQL_TYPE_DATE DATE 날짜를 표현하는 데이터 타입
SQL_TYPE_TIME DATE 날짜를 표현하는 데이터 타입
SQL_TYPE_TIMESTAMP DATE 날짜를 표현하는 데이터 타입
SQL_INTERVAL - DATE - DATE의 결과 타입
SQL_BYTES BYTE(n) 명시된 크기(n)만큼 고정된 길이를 가지는 이진 데이터 타입 (1 byte<=n<=32000 bytes)
SQL_NIBBLE NIBBLE(n) 명시된 크기(n)만큼 가변 길이를 가지는 이진 데이터 타입 (1 character<=n<=254 characters)
SQL_GEOMETRY GEOMETRY 내부적으로 7개의 데이터 타입(Point, LineString, Polygon, GeometryCollection, MultiLineString, MultiPolygon, MultiPoint)의 속성을 함축하고 있으며 이 함축된 속성은 각 타입에 따라 지원되는 함수로서 구분 가능:
FIXED로 선언했을 경우는 고정길이의 저장 공간을 사용하고, VARIABLE로 선언했을 경우는 가변 길이의 저장 공간을 사용


C 데이터형#

C 데이터 타입들은 애플리케이션에서 데이터를 저장하기 위해 사용되는 C 버퍼의 데이터 타입을 나타낸다.

C 데이터 타입은 type 인자와 함께 SQLBindCol()과 SQLGetData()에 그리고 cType과 함께 SQLBindParameter()에 명시된다.

다음 테이블은 C 데이터 타입에 대해 유효한 타입 식별자들의 목록이다. 또한, 테이블은 각 식별자에 해당하는 ODBC 스펙의 C 데이터 타입과 이 데이터 타입의 정의를 나열한다.

C Type 식별자 ODBC C typedef C type
SQL_C_CHAR SQLSCHAR * char *
SQL_C_WCHAR SQLWCHAR * short *
SQL_C_STINYINT SQLSCHAR signed char
SQL_C_UTINYINT SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64
SQL_C_UBIGINT SQLUBIGINT unsigned _int64
SQL_C_SSHORT SQLSMALLINT short int
SQL_C_USHORT SQLUSMALLINT unsigned short int
SQL_C_SLONG SQLINTEGER int
SQL_C_ULONG SQLUINTEGER unsigned int
SQL_C_FLOAT SQLREAL float
SQL_C_DOUBLE SQLDOUBLE double
SQL_C_BINARY SQLCHAR * unsigned char *
C Type 식별자 ODBC C typedef C type
SQL_C_TYPE_DATE SQL_DATE_STRUCT struct tagDATE_STRUCT {
SQLSMALLINT year;
SQLSMALLINT month;
SQLSMALLINT day;
} DATE_STRUCT
SQL_C_TYPE_TIME SQL_TIME_STRUCT struct tagTIME_STRUCT {
SQLSMALLINT hour;
SQLSMALLINT minute;
SQLSMALLINT second;
} TIME_STRUCT
SQL_C_TYPE_TIMESTAMP SQL_TIMESTAMP_STRUCT struct tagTIMESTAMP_STRUCT {
SQLSMALLINT year;
SQLSMALLINT month;
SQLSMALLINT day;
SQLSMALLINT hour;
SQLSMALLINT minute;
SQLSMALLINT second;
SQLINTEGER fraction;
} TIMESTAMP_STRUCT;
SQL_C_NIBBLE SQL_NIBBLE_STRUCT struct tagNIBBLE_STRUCT {
SQLCHAR length;
SQLCHAR value[1];
} NIBBLE_STRUCT
SQL_C_NUMERIC SQL_NUMERIC_STRUCT struct tagSQL_NUMERIC_STRUCT {
SQLCHAR precision;
SQLSCHAR scale;
SQLCHAR sign;
SQLCHAR val[SQL_MAX_NUMERIC_LEN];
} SQL_NUMERIC_STRUCT;

SQLCHAR val는 little endian 기반으로 처리된다. 따라서 big endian OS를 사용하는경우에도 little endian byte order로 세팅해 줘야 된다.


SQL 데이터형을 C 데이터형으로 변환하기#

# : Default conversion / ○ : Supported conversion

SQL_C_CHAR SQL_C_WCHAR SQL_C_BIT SQL_C_STINYINT SQL_C_UTINYINT SQL_C_SBIGINT SQL_C_UBIGINT SQL_C_SSHORT SQL_C_USHORT SQL_C_SLONG SQL_C_ULONG SQL_C_FLOAT SQL_C_DOUBLE SQL_C_BINARY SQL_C_TYPE_DATE SQL_C_TYPE_TIME SQL_C_TYPE_TIMESTAMP SQL_C_BYTES SQL_C_NIBBLE SQL_C_NUMERIC
SQL_CHAR #
SQL_VARCHAR #
SQL_WCHAR #
SQL_WVARCHAR #
SQL_DECIMAL # #
SQL_NUMERIC # #
SQL_SMALLINT #
(signed)
SQL_INTEGER #
(signed)
SQL_BIGINT #
(signed)
SQL_REAL #
SQL_FLOAT # #
SQL_DOUBLE #
SQL_BINARY #
SQL_TYPE_DATE #
SQL_TYPE_TIME #
SQL_TYPE_TIMESTAMP #
SQL_INTERVAL #
SQL_BYTES #
SQL_NIBBLE #
SQL_GEOMETRY #
  • SQL_NUMERIC - SQL_C_BINARY의 경우 SQL_NUMERIC_STRUCT 으로 변환된다.


C 데이터형을 SQL 데이터형으로 변환하기#

# : Default conversion / ○ : Supported conversion

SQL_CHAR SQL_VARCHAR SQL_WCHAR SQL_WVARCHAR SQL_DECIMAL SQL_NUMERIC SQL_SMALLINT(signed) SQL_INTEGER(signed) SQL_BIGINT(signed) SQL_REAL SQL_FLOAT SQL_DOUBLE SQL_BINARY SQL_DATE SQL_INTERVAL SQL_BYTES SQL_NIBBLE SQL_GEOMETRY
SQL_C_CHAR # # # #
SQL_C_WCHAR # #
SQL_C_BIT
SQL_C_STINYINT
SQL_C_UTINYINT
SQL_C_SBIGINT #
SQL_C_UBIGINT
SQL_C_SSHORT #
SQL_C_USHORT
SQL_C_SLONG #
SQL_C_ULONG
SQL_C_FLOAT #
SQL_C_DOUBLE # #
SQL_C_BINARY #
SQL_C_TYPE_DATE
SQL_C_TYPE_TIME
SQL_C_TYPE_TIMESTAMP
SQL_C_BYTES #
SQL_C_NIBBLE #
SQL_C_NUMERIC
  • SQL_NUMERIC - SQL_C_BINARY의 경우 SQL_NUMERIC_STRUCT 으로 변환된다.