오늘은 CUBRID의 산술 결과 부동 소숫점 자리 결과를 컨트롤 할 수 있는 옵션에 대해서 알아보자.
http://cubrid.org/manual/ko/9.3.0/admin/config.html#stmt-type-parameters
구문/타입 관련 파라미터
다음은 CUBRID에서 지원하는 SQL 구문 및 데이터 타입에 관한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
... | ||||
compat_numeric_division_scale | bool | no | ||
... |
compat_numeric_division_scale
compat_numeric_division_scale은 나눗셈 연산의 결과 값(몫)에 대하여 소수점 이하 자릿수를 몇 자리까지 표시할 것인가를 지정하기 위한 파라미터로 no로 설정하면 몫의 소수점 이하 자릿수가 9개가 되고, yes로 설정하면 몫의 소수점 이하 자릿수가 피연산자의 소수점 이하 자릿수에 따라 결정된다. 기본값은 no이다.
CUBRID를 사용 시 연산 결과가 타 DBMS와 다르게 나오는 것은 아니다.
하지만 결과 값을 JAVA의 STRING으로 받아서 그냥 처리 하다 보면 예상과 다른 값을 얻게 된다.
다음과 같은 결과이다.
쿼리)
SELECT 1/3. AS val, TYPEOF(1/3.) AS val_type
결과)
val | val_type |
0.333333333 | numeric (25, 9) |
하지만 cubrid.conf 에 compat_numeric_division_scale=yes로 설정 후 DB를 재 기동하면 다음과 같은 결과를 얻을 수 있다.
쿼리)
SELECT 1/3. AS val, TYPEOF(1/3.) AS val_type
결과)
val | val_type |
0.3 | numeric (17, 1) |
쿼리)
SELECT 1/3.71 AS val, TYPEOF(1/3.71) AS val_type
결과)
val | val_type |
0.26 | numeric (19, 2) |
위의 결과와 같이 젯수 또는 피젯수의 소수점 이하 자리 수를 예상 할 수 있다.