* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
Rocky Linux |
|
11.2.7.0797 |
|
10.2.0.0001 |
|
java, mybatis, cubrid |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
테이블 정보
CREATE TABLE [product] (
[id] CHARACTER VARYING (34) NOT NULL,
[prd_id] CHARACTER VARYING (100) NOT NULL,
CONSTRAINT [pk] PRIMARY KEY([id])
)
REUSE_OID,
COLLATE utf8_bin
현재 1번 DB 서버와 2번 DB 서버에서 같은 쿼리를 실행시켰을때
1번DB 서버에서는 정상적으로 실행되나 2번에서 에러가 발생합니다.
1번 서버와 2번 서버의 차이는
DB서버 | 1번 | 2번 |
큐브리드 버전 | 10.2.8.8904 | 11.2.7.0797 |
OS | CentOs | Rocky Linux |
collate | utf-8 ko_kr | utf-8 en_us |
reuse_oid | 미사용 | 사용 |
이며 실행 쿼리는 다음과 같습니다.
SELECT
CASE
WHEN (
prd_num IS NULL
OR prd_num = ''
) THEN '0'
ELSE prd_num
END
FROM
(
SELECT
prd_id,
COUNT(id) AS prd_num
FROM
product
GROUP BY
prd_id
);
1번 DB는 정상적으로 실행 되나
2번 DB로 같은 쿼리를 실행시켰을때 아래와 같은 에러가 발생합니다.
실행 오류 : -494
Semantic: before '
) THEN '0'
ELSE prd_num
END
FROM
(
SELECT
...'
Cannot coerce '' to type bigint. select case when ([__t1].prd_num is null or [__t1].prd_num=...
2번 DB에서
COUNT(id) AS prd_num 부분을
CAST(COUNT(id) AS VARCHAR) AS prd_num 으로 변경시 정상적으로 실행됩니다.
결론은
1. 비슷한 조건의 DB에서 동일 쿼리를 실행했을때 오류가 발생한 원인이 큐브리드의 문제인지
2. VARCHAR 로 캐스팅 했을때 쿼리가 실행되는 이유
3. 또는 다른 요인이 있는지
궁금합니다.
답변 부탁드립니다.
문자열을 bigint로 자동 형 변환시 발생한 오류는 11.3에서 수정되었습니다.
참고로 CUBRID에서는 count() 반환값이 ''로 전달되는 경우가 없으므로 해당 조건 prd_num=''를 제거하고 사용하시면 됩니다.