{"record":{"id":"9a72e2a3d968b624","repo":"apache/seatunnel","slug":"common-17-9a72e2","errorCode":"COMMON-17","errorMessage":"'${identifier}' unsupported convert type '${dataType}' of '${field}' to SeaTunnel data type.","messagePattern":"'(.+?)' unsupported convert type '(.+?)' of '(.+?)' to SeaTunnel data type\\.","errorType":"error_code","errorClass":"SeaTunnelRuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java","lineNumber":282,"sourceCode":"            case ORACLE_TIMESTAMP_WITH_TIME_ZONE:\n            case ORACLE_TIMESTAMP_WITH_LOCAL_TIME_ZONE:\n                // TIMESTAMP WITH (LOCAL) TIME ZONE is LTZ\n                builder.dataType(LocalTimeType.OFFSET_DATE_TIME_TYPE);\n                if (typeDefine.getScale() == null) {\n                    builder.scale(TIMESTAMP_DEFAULT_SCALE);\n                } else {\n                    builder.scale(typeDefine.getScale());\n                }\n                break;\n            case ORACLE_INTERVAL:\n            case ORACLE_INTERVAL_YEAR:\n            case ORACLE_INTERVAL_DAY:\n            case ORACLE_INTERVAL_YM:\n            case ORACLE_INTERVAL_DS:\n                builder.dataType(BasicType.STRING_TYPE);\n                break;\n            default:\n                throw CommonError.convertToSeaTunnelTypeError(\n                        DatabaseIdentifier.ORACLE, oracleType, typeDefine.getName());\n        }\n        return builder.build();\n    }\n\n    @Override\n    public BasicTypeDefine reconvert(Column column) {\n        BasicTypeDefine.BasicTypeDefineBuilder builder =\n                BasicTypeDefine.builder()\n                        .name(column.getName())\n                        .nullable(column.isNullable())\n                        .comment(column.getComment())\n                        .defaultValue(column.getDefaultValue());\n        switch (column.getDataType().getSqlType()) {\n            case BOOLEAN:\n                builder.columnType(String.format(\"%s(%s)\", ORACLE_NUMBER, 1));\n                builder.dataType(ORACLE_NUMBER);\n                builder.length(1L);","sourceCodeStart":264,"sourceCodeEnd":300,"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#L264-L300","documentation":"Thrown by OracleTypeConverter.convert() when an Oracle column type cannot be mapped to a SeaTunnel data type. The converter handles known types (interval types map to STRING, NUMBER narrowing, TIMESTAMP variants, etc.); the default branch fires for unrecognized or unsupported Oracle type names. This fails schema conversion of the Oracle source before any data is read.","triggerScenarios":"convert(BasicTypeDefine) on OracleTypeConverter with an oracleType outside the switch at OracleTypeConverter.java:282 — e.g. BFILE, ANYDATA, user-defined OBJECT/TABLE types, opaque types, or unusual type metadata strings. Known test/production paths call it during column conversion.","commonSituations":"Reading Oracle tables with object/relational types (SDO_GEOMETRY, XMLType in some versions, ANYDATA), BFILE columns, or legacy schema types; auto schema discovery hitting a column type the converter doesn't enumerate.","solutions":["Identify the unsupported Oracle type from '<dataType>' and the column from '<field>'.","Exclude the column via explicit SELECT projection of supported columns.","Cast in a custom query (e.g. XMLSERIALIZE / XMLCAST for XMLType, DBMS_LOB for BFILE metadata) to a mappable type.","Upgrade SeaTunnel — Oracle type coverage grows between versions.","Add a convert() case for the type in OracleTypeConverter and submit upstream."],"exampleFix":"// before\nSELECT * FROM docs; -- XMLType col fails\n// after\nSELECT id, XMLSERIALIZE(CONTENT doc AS CLOB) AS doc FROM docs;","handlingStrategy":"validation","validationCode":"// Pre-check Oracle column types for converter support\nfor (BasicTypeDefine c : oracleTableColumns) {\n    try { new OracleTypeConverter().convert(c); }\n    catch (SeaTunnelRuntimeException e) {\n        throw new IllegalStateException(\"Unsupported Oracle type \" + c.getDataType() + \" on column \" + c.getName());\n    }\n}","typeGuard":"boolean isOracleTypeSupported(BasicTypeDefine td) {\n    try { new OracleTypeConverter().convert(td); return true; }\n    catch (SeaTunnelRuntimeException e) { return false; }\n}","tryCatchPattern":"try {\n    converter.convert(typeDefine);\n} catch (SeaTunnelRuntimeException e) {\n    if (e.getMessage().contains(\"unsupported convert type\")) {\n        LOG.error(\"Oracle column {} type {} unsupported; cast or exclude it\", typeDefine.getName(), typeDefine.getDataType());\n    }\n    throw e;\n}","preventionTips":["Scan DDL for OBJECT/ANYDATA/BFILE/XMLType columns before ingestion.","Use SQL casts/serializations (XMLSERIALIZE, SDO_UTIL.TO_WKTGEOMETRY) for special columns.","Prefer explicit column lists in the source query.","Upgrade SeaTunnel for extended Oracle type coverage."],"tags":["jdbc","type-conversion","oracle","schema"],"backgroundTag":"unsupported-dtype","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"}