如何在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
相关产品推荐
相关产品推荐

