{"record":{"id":"0e769b595825adcd","repo":"apache/seatunnel","slug":"the-timestamp-column-type-timestamp-is-out-0e769b","errorCode":null,"errorMessage":"The timestamp column {} type timestamp({}) is out of range, which exceeds the maximum scale of {}, it will be converted to timestamp({})","messagePattern":"The timestamp column (.+?) type timestamp\\((.+?)\\) is out of range, which exceeds the maximum scale of (.+?), it will be converted to timestamp\\((.+?)\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java","lineNumber":414,"sourceCode":"                            String.format(\"%s(%s)\", ORACLE_VARCHAR2, column.getColumnLength()));\n                    builder.dataType(ORACLE_VARCHAR2);\n                } else {\n                    builder.columnType(ORACLE_CLOB);\n                    builder.dataType(ORACLE_CLOB);\n                }\n                break;\n            case DATE:\n                builder.columnType(ORACLE_DATE);\n                builder.dataType(ORACLE_DATE);\n                break;\n            case TIMESTAMP:\n                // NTZ: maps to ORACLE_TIMESTAMP (without timezone)\n                if (column.getScale() == null || column.getScale() <= 0) {\n                    builder.columnType(ORACLE_TIMESTAMP);\n                } else {\n                    int timestampScale = column.getScale();\n                    if (timestampScale > MAX_TIMESTAMP_SCALE) {\n                        log.warn(\n                                \"The timestamp column {} type timestamp({}) is out of range, \"\n                                        + \"which exceeds the maximum scale of {}, \"\n                                        + \"it will be converted to timestamp({})\",\n                                column.getName(),\n                                timestampScale,\n                                MAX_TIMESTAMP_SCALE,\n                                MAX_TIMESTAMP_SCALE);\n                        timestampScale = MAX_TIMESTAMP_SCALE;\n                    }\n                    builder.columnType(String.format(\"TIMESTAMP(%s)\", timestampScale));\n                    builder.scale(timestampScale);\n                }\n                builder.dataType(ORACLE_TIMESTAMP);\n                break;\n            case TIMESTAMP_TZ:\n                // LTZ: maps to ORACLE_TIMESTAMP_WITH_LOCAL_TIME_ZONE\n                if (column.getScale() == null || column.getScale() <= 0) {\n                    builder.columnType(ORACLE_TIMESTAMP_WITH_LOCAL_TIME_ZONE);","sourceCodeStart":396,"sourceCodeEnd":432,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java#L396-L432","documentation":"Warning from OracleTypeConverter.reconvert for timestamp-without-timezone columns: the column's scale (fractional-second precision) exceeds MAX_TIMESTAMP_SCALE (Oracle supports up to 9), so the timestamp is converted with the clamped scale. The message states the original timestamp(scale), the max, and the resulting timestamp(max).","triggerScenarios":"reconvert on a Column mapped to ORACLE_TIMESTAMP where getScale() > MAX_TIMESTAMP_SCALE, e.g. a source timestamp with scale 12 in auto schema creation for Oracle sink.","commonSituations":"Engines that allow >9 fractional digits (some analytic systems) syncing timestamps into Oracle via auto DDL; chained pipelines carrying inflated timestamp scales.","solutions":["Truncate the timestamp upstream to ≤9 fractional digits, e.g. DATE_TRUNC/TRUNC to microseconds or nanoseconds.","Create the Oracle table with the desired TIMESTAMP(9) explicitly.","If sub-nanosecond digits are meaningful, they cannot be stored in Oracle — keep them in a separate string column.","Accept the clamp if only millisecond/microsecond precision is needed."],"exampleFix":"// before\nev_ts timestamp(scale=12)\n// after (upstream)\nev_ts = date_trunc(ev_ts, 'nanoseconds'); -- scale ≤ 9","handlingStrategy":"validation","validationCode":"if (column.getScale() != null && column.getScale() > 9) {\n  // truncate upstream: date_trunc(ts, 'nanoseconds')\n}","typeGuard":"boolean isOracleSafeTimestamp(Integer scale) {\n  return scale == null || (scale >= 0 && scale <= 9);\n}","tryCatchPattern":null,"preventionTips":["Check timestamp fractional scales when syncing from engines allowing >9 digits.","Truncate to microseconds/nanoseconds upstream so rounding is intentional.","Pre-create Oracle tables with TIMESTAMP(9) where needed."],"tags":["jdbc","oracle","timestamp","scale"],"backgroundTag":"value-out-of-range","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}