6. 데이터 타입과 JSON 표현#
DataAPI는 SQL 매개변수와 조회 결과를 JSON 형식으로 주고받는다.
일반적인 SQL 매개변수는 JSON 기본 타입(Number, String, Boolean, null)으로 전달할 수 있다. BLOB, CLOB과 같이 데이터 타입을 명시적으로 지정해야 하는 매개변수는 타입 정보를 포함한 객체를 사용하여 전달한다.
조회 결과는 Altibase 데이터 타입에 따라 적절한 JSON 타입으로 변환되어 반환된다.
6.1 일반 입력#
SQL 요청의 args에는 일반적으로 JSON의 기본 타입(Number, String, Boolean, null)을 사용한다.
| JSON 타입 | 설명 |
| ---------- | ---- |
| Number | 숫자 값 |
| String | 문자열 |
| Boolean | 논리값(true 또는 false) |
| null | NULL |
6.2 구조화된 객체(Structured Object) 입력#
BLOB, CLOB처럼 JSON 기본 타입만으로 표현하기 어려운 데이터는 type과 value를 포함한 객체를 사용하여 명시적으로 타입을 지정한다.
예시:
{
"type": "blob",
"value": "AQID"
}
지원하는 타입은 다음과 같다.
| type | value 형식 | 용도 |
|---|---|---|
| blob | Base64 문자열 | 큰 바이너리 입력 |
| clob | 문자열 | 큰 텍스트 입력 |
| varbyte | Base64 문자열 | Altibase 전용 바이너리 타입 |
| geometry | Base64 문자열 | 공간 데이터 바이너리 표현 |
| nibble | 16진수 문자열 | Altibase nibble 값 |
| bit | 0/1 문자열 | bit 값 |
| varbit | 0/1 문자열 | varbit 값 |
| bigint | 정수 문자열 | 64-bit 정수 |
| numeric | 정밀도를 유지하는 숫자 문자열 | 정밀도 보존 숫자 |
| decimal | 정밀도를 유지하는 숫자 문자열 | 정밀도 보존 숫자 |
| number | 정밀도를 유지하는 숫자 문자열 | 정밀도 보존 숫자 |
bigint,numeric,decimal,number는 정밀도 손실을 방지하기 위해 문자열(String)로 전달한다.
예시:
{
"sql": "INSERT INTO T1 (ID, PAYLOAD, NOTE) VALUES (?, ?, ?)",
"args": [
1,
{ "type": "blob", "value": "AQID" },
{ "type": "clob", "value": "memo" }
]
}
Caution
잘못된 Base64, 잘못된 nibble hex, 범위를 벗어난 bigint, 잘못된 bit 문자열은 COMMON_002 오류로 거부된다.
6.3 조회 결과의 JSON 표현#
조회 결과는 Altibase 데이터 타입에 따라 아래와 같이 JSON으로 변환된다.
| Altibase 데이터 타입 | JSON 표현 | 비고 |
|---|---|---|
| SMALLINT, INTEGER | Number | 일반 정수 |
| REAL, DOUBLE | Number | 부동소수 |
| BIGINT | String | 정밀도 보존 |
| NUMERIC, DECIMAL, NUMBER | String | 정밀도 보존 |
| CHAR, VARCHAR, NCHAR, NVARCHAR | String | 문자열 |
| DATE, TIME, TIMESTAMP | String | JDBC 문자열 표현 |
| INTERVAL | String | JDBC 드라이버 toString() 값 |
| BIT, VARBIT | String | 0/1 문자열 |
| NIBBLE | String | 대문자 16진수 문자열 |
| BYTE, VARBYTE, BLOB | String | Base64 문자열 |
| GEOMETRY | String | Base64 문자열 |
| CLOB | String | 문자열 |
| JSON | String | JSON 텍스트 |