You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin Exposed框架中用EMPTY_BLOB()更新Oracle的LOB值

解决Kotlin Exposed中生成EMPTY_BLOB()而非EMPTY_BLOB(VALUE)的问题

要在Exposed中正确生成无参数的EMPTY_BLOB()函数调用,有两种实用方法:

方法一:自定义无参数SQL函数(类型安全推荐)

通过CustomFunction定义一个无参数的EMPTY_BLOB实现,确保生成的SQL不带多余参数:

// 定义无参数的EMPTY_BLOB函数
class EmptyBlob : CustomFunction<Blob>(
    name = "EMPTY_BLOB",
    columnType = BlobColumnType(),
    arguments = emptyList()
)

// 执行更新操作
transaction {
    ValuesTable.update({ ValuesTable.VALUE inSubQuery TempTable.select(TempTable.VALUE) }) {
        it[ValuesTable.BLOB_VALUE] = EmptyBlob()
    }
}

这个方式通过明确指定空参数列表,让Exposed生成正确的EMPTY_BLOB()调用,同时保持类型安全,适合需要重复使用该函数的场景。

方法二:直接使用原生SQL片段(快捷一次性场景)

如果只是单次使用,可直接用expr方法插入原生SQL片段:

transaction {
    ValuesTable.update({ ValuesTable.VALUE inSubQuery TempTable.select(TempTable.VALUE) }) {
        it[ValuesTable.BLOB_VALUE] = expr("EMPTY_BLOB()")
    }
}

expr方法会直接将传入的SQL字符串作为表达式插入,不需要额外定义函数,适合简单的一次性操作。

以上两种方法都能避免生成错误的EMPTY_BLOB(VALUE)格式,生成符合需求的SQL语句:

UPDATE VALUES SET BLOB_VALUE = EMPTY_BLOB() WHERE VALUE IN (SELECT VALUE FROM TEMP_TABLE)

内容的提问来源于stack exchange,提问作者ICC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:42:32