我正在尝试使用Clob运行批处理更新,但是我的表正在使用Clobs内存地址而不是Clob值进行更新。

def updateCounts = sql
    .withBatch('UPDATE my_table SET clob_column = ? WHERE id = ?') { stmt ->
        fileList.each { fileName->

            Clob commentClob = CLOB.createTemporary(sql.getConnection(), false, CLOB.DURATION_SESSION)
            CSVReader reader = new CSVReader(
                new FileReader(theInfoFile),
                CSVParser.DEFAULT_SEPARATOR,
                CSVParser.DEFAULT_QUOTE_CHARACTER, 1)
            String[] row;

            while ((row = reader.readNext()) != null) {
                commentClob.truncate(0)
                commentClob.setString(1,"${row[17]}")
                stmt.addBatch([commentClob,row[0]])
            }
        }
}


我在数据库中看到的值是“ oracle.sql.CLOB@15500a8”。关于如何处理Clob值的任何建议?

最佳答案

未经测试,但是您可以尝试特定于oracle的characterOutputStream

commentClob.characterOutputStream << row[17]


您可能需要将变量键入为:

OracleClob commentClob = ...


代替:

Clob commentClob = ...


但是俗套就是俗套,您可能不需要。

10-06 01:07