{"record":{"id":"4fa3e0009463037c","repo":"apache/seatunnel","slug":"dml-statement-couldn-t-be-parsed-please-open-a-ji","errorCode":null,"errorMessage":"DML statement couldn't be parsed. Please open a Jira issue with the statement '${redoSql}'.","messagePattern":"DML statement couldn't be parsed\\. Please open a Jira issue with the statement '(.+?)'\\.","errorType":"exception","errorClass":"DmlParserException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/io/debezium/connector/oracle/logminer/processor/AbstractLogMinerEventProcessor.java","lineNumber":1093,"sourceCode":"     *\n     * @param redoSql the redo SQL statement\n     * @param table the table the SQL statement is for\n     * @param transactionId the associated transaction id for the SQL statement\n     * @return a parse object for the redo SQL statement\n     */\n    private LogMinerDmlEntry parseDmlStatement(String redoSql, Table table, String transactionId) {\n        LogMinerDmlEntry dmlEntry;\n        try {\n            Instant parseStart = Instant.now();\n            dmlEntry = dmlParser.parse(redoSql, table);\n            metrics.addCurrentParseTime(Duration.between(parseStart, Instant.now()));\n        } catch (DmlParserException e) {\n            String message =\n                    \"DML statement couldn't be parsed.\"\n                            + \" Please open a Jira issue with the statement '\"\n                            + redoSql\n                            + \"'.\";\n            throw new DmlParserException(message, e);\n        }\n\n        if (dmlEntry.getOldValues().length == 0) {\n            if (EventType.UPDATE == dmlEntry.getEventType()\n                    || EventType.DELETE == dmlEntry.getEventType()) {\n                LOGGER.warn(\"The DML event '{}' contained no before state.\", redoSql);\n                metrics.incrementWarningCount();\n            }\n        }\n\n        return dmlEntry;\n    }\n\n    private static Pattern LOB_WRITE_SQL_PATTERN =\n            Pattern.compile(\n                    \"(?s).* := ((?:HEXTORAW\\\\()?'.*'(?:\\\\))?);\\\\s*dbms_lob.write\\\\([^,]+,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,[^,]+\\\\);.*\");\n\n    /**","sourceCodeStart":1075,"sourceCodeEnd":1111,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/io/debezium/connector/oracle/logminer/processor/AbstractLogMinerEventProcessor.java#L1075-L1111","documentation":"When parsing a DML statement from SQL_REDO, the parser throws DmlParserException; parseDmlStatement wraps it, re-throwing DmlParserException with a message asking to report the redo SQL via a Jira issue. This means LogMiner emitted a DML string the connector's parser cannot understand — usually a parser gap rather than user misconfiguration.","triggerScenarios":"AbstractLogMinerEventProcessor's DML parse path (called while handling data events) encounters a redo SQL string whose structure defeats the DmlParser — e.g. novel syntax, unusual quoting, long identifiers, or unsupported predicates in the WHERE clause.","commonSituations":"Oracle-generated DML with unusual column/value escaping (embedded quotes, special characters); inserts/updates with subquery-style predicates after an Oracle upgrade; long column lists exceeding parser assumptions; NLS/session-specific formatting of literals.","solutions":["Capture the full redoSql and open a Debezium Jira issue as the message instructs (include Oracle version and connector version).","Check for a newer Debezium release — many parser gaps are fixed incrementally; upgrade the connector artifact.","As a workaround, adjust application write patterns that produce the exotic DML (e.g. avoid special characters needing nonstandard escaping).","If only one table is affected, temporarily exclude it from capture until the parser fix lands."],"exampleFix":"null","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    event = parseDmlStatement(redoSql);\n} catch (DmlParserException e) {\n    LOGGER.warn(\"Unparseable DML, capture for Jira: {}\", redoSql, e);\n}","preventionTips":["Track Debezium releases for DML parser fixes and upgrade promptly","Avoid exotic literal escaping patterns in application writes","File the Jira issue with the full redo SQL as the message requests","Temporarily exclude the offending table from capture until fixed"],"tags":["oracle","cdc","logminer","dml-parser","redo-sql"],"backgroundTag":"invalid-argument-format","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}