Trino 472 의 Oracle 커넥터로 테이블을 조회하면 precision 과 scale 을 지정하지 않은 NUMBER 컬럼이 결과에서 빠지고, SELECT 시 result 6 not found in context 오류가 난다. oracle.number.default-scale=0 을 이미 넣었는데도 같은 증상이 나는 경우가 있다.
Oracle 의 NUMBER 는 최대 38 자리 precision 을 갖고 scale 이 음수일 수도 있다. Trino 는 DECIMAL(38, s) 로 매핑하는데, precision 이나 scale 이 없으면 매핑 대상에서 제외하고, scale 이 음수이면서 precision - scale 이 38 을 넘으면 기본 반올림 모드 UNNECESSARY 때문에 오류가 난다. 매핑되지 않은 컬럼이 있으면 내부 컬럼 인덱스가 어긋나 result N not found in context 로 나타난다.
Oracle 카탈로그 설정 파일(etc/catalog/oracle.properties)에 두 항목을 함께 둔다.
oracle.number.default-scale=0
oracle.number.rounding-mode=HALF_UP
default-scale 은 precision 없는 NUMBER 를 DECIMAL(38, 0) 으로 매핑하게 하고, rounding-mode 는 음수 scale 이나 소수부가 있는 값을 잘라 넣을 때 오류 대신 반올림하게 한다. 설정 후 코디네이터와 워커를 재시작한다.
문제 컬럼을 특정하려면 Oracle 쪽에서 컬럼 정의를 본다.
SELECT column_name, data_type, data_precision, data_scale
FROM all_tab_columns
WHERE table_name = 'YOUR_TABLE';
Trino 쪽에서는 DESCRIBE oracle_catalog.schema_name.table_name; 으로 매핑된 컬럼만 보이는지 확인한다. 가능하면 Oracle 테이블의 컬럼을 NUMBER(38,0) 처럼 precision 을 명시해 두는 것이 근본 해결이다.