适用版本
OceanBase 数据库 V3.x 版本。
问题描述
OceanBase 数据库 Oracle 模式执行 Update 更新 Clob 列时报错。
ora-00932:inconsistent datatypes,ret_code=-5083
问题原因
复现如下。

对应的 observer.log 过滤如下。
[root@ob21 log]# grep YB42C523140B-0005xxxxxxxxxxxx observer.log
observer.log:[2022-01-08 15:44:03.782750] WARN [SERVER] test_and_save_retry_state (ob_query_retry_ctrl.cpp:527) [2057305][2840][YB42C523140B-0005xxxxxxxxxxx] [lt=16] [dc=0] do not need retry(client_ret=-5083, err=-5083, expected_stmt=true, THIS_WORKER.get_timeout_ts()=1641629643782249, retry_type_=0, result.get_stmt_type()=5, result.get_exec_context().need_change_timeout_ret()=true, session->get_retry_info().get_last_query_retry_err()=0)
所以此问题原因是 where 条件中将字段 name 与字符串做比较,name 的类型是 clob,clob 不能和任何类型做比较。
解决方法
把 clob 列转成 varchar 后再和字符串做比较。
也可以使用
dbms_lob.compare来做比较。dbms_lob.compare函数见官方文档 COMPARE。