{"record":{"id":"93e3a46425b4c5db","repo":"apache/seatunnel","slug":"the-timestamp-tz-column-type-timestamp-is-o","errorCode":null,"errorMessage":"The timestamp_tz column {} type timestamp({}) is out of range, which exceeds the maximum scale of {}, it will be converted to timestamp({})","messagePattern":"The timestamp_tz 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":436,"sourceCode":"                                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);\n                } else {\n                    int timestampTzScale = column.getScale();\n                    if (timestampTzScale > MAX_TIMESTAMP_SCALE) {\n                        log.warn(\n                                \"The timestamp_tz 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                                timestampTzScale,\n                                MAX_TIMESTAMP_SCALE,\n                                MAX_TIMESTAMP_SCALE);\n                        timestampTzScale = MAX_TIMESTAMP_SCALE;\n                    }\n                    builder.columnType(\n                            String.format(\"TIMESTAMP(%s) WITH LOCAL TIME ZONE\", timestampTzScale));\n                    builder.scale(timestampTzScale);\n                }\n                builder.dataType(ORACLE_TIMESTAMP_WITH_LOCAL_TIME_ZONE);\n                break;\n            default:\n                throw CommonError.convertToConnectorTypeError(\n                        DatabaseIdentifier.ORACLE,","sourceCodeStart":418,"sourceCodeEnd":454,"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#L418-L454","documentation":"Warning from OracleTypeConverter.reconvert for timestamp-with-local-time-zone columns: the column's fractional-second scale exceeds MAX_TIMESTAMP_SCALE, so the mapped ORACLE_TIMESTAMP_WITH_LOCAL_TIME_ZONE type is created with the clamped scale. The message reports original timestamp(scale), the max, and the converted timestamp(max).","triggerScenarios":"reconvert on a Column mapped to ORACLE_TIMESTAMP_WITH_LOCAL_TIME_ZONE where column.getScale() > MAX_TIMESTAMP_SCALE, during sink schema creation for Oracle.","commonSituations":"Syncing high-precision timestamptz columns (e.g. from Postgres/analytic stores) into Oracle with auto table creation; pipelines that preserved excessive scale from earlier conversions.","solutions":["Normalize the column upstream to ≤9 fractional digits before writing to Oracle.","Pre-create the Oracle table with TIMESTAMP(9) WITH LOCAL TIME ZONE and load into it.","If higher precision is required, Oracle cannot represent it — serialize as string or move to a store that supports it.","Accept the clamp if microsecond precision suffices."],"exampleFix":"// before\nev_tztz timestamp(scale=12) → TIMESTAMP(12) WITH LOCAL TIME ZONE\n// after (upstream)\nev_tztz = date_trunc(ev_tztz, 'nanoseconds'); → TIMESTAMP(9) WITH LOCAL TIME ZONE","handlingStrategy":"validation","validationCode":"if (column.getScale() != null && column.getScale() > 9) {\n  // normalize timestamptz upstream: date_trunc(ts, 'nanoseconds')\n}","typeGuard":"boolean isOracleSafeTzTimestamp(Integer scale) {\n  return scale == null || (scale >= 0 && scale <= 9);\n}","tryCatchPattern":null,"preventionTips":["Audit timestamptz columns for scale > 9 before Oracle sink auto DDL.","Truncate fractional seconds upstream for deterministic rounding.","Pre-create TIMESTAMP(9) WITH LOCAL TIME ZONE columns for high-precision needs."],"tags":["jdbc","oracle","timestamp","timezone","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"}