首批通过分布式安全可靠测评,为关键业务系统打造
order by clob 列报错 inconsistent datatypes
更新时间:2023-12-07 03:16
问题描述
在使用 OceanBase 数据库时,当执行 SELECT 查询并使用 ORDER BY 对 CLOB 类型的列进行排序时,出现了错误提示:
ORA-00932: inconsistent datatypes。
示例如下:
创建测试表。
obclient > CREATE TABLE clob_table(id number primary key, clob_column clob not null); Query OK, 0 rows affected (0.036 sec)插入测试数据。
obclient > INSERT INTO clob_table VALUES(1, 'aasdgasbasdg'); Query OK, 1 row affected (0.004 sec)INSERT INTO clob_table VALUES (2, 'aasdgasbasdg'); Query OK, 1 row affected (0.000 sec)提交插入数据。
obclient > commit; Query OK, 0 rows affected (0.001 sec)执行查询语句。
obclient > SELECT clob_column FROM clob_table WHERE id =1 ORDER BY 1; ORA-00932: inconsistent datatypesobserver 日志信息。
WARN [SQL.RESV] check_order_by (ob_select_resolver.cpp:776) [79825][0][YB420BEE9694-0005FD849735CE1F-0-0] [lt=10] [dc=0] lob expr can't order(ret=-5083, *order_items.at(i).expr_={item_type:"T_REF_COLUMN", result_type:{meta:{type:"LOB", collation:"utf8mb4_bin", coercibility:"IMPLICIT"}, accuracy:{length:50331648, precision:-1, scale:-1}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_COLUMN", "CNT_COLUMN"], rel_id:[1], table_id:1100611139453861, column_id:17, database_name:"SYS", table_name:"CLOB_TBL", synonym_name:"", synonym_db_name:"", column_name:"CLOB_COL", expr_level:0, expr_levels:[0], column_flags:0, enum_set_values:[], is_lob_column:true, is_joined_dup_column:false, is_unpivot_mocked_column:false, is_hidden:false})
适用版本
OceanBase 数据库 v2.x 和 V3.x 版本。
问题原因
在 OceanBase 数据库中,由于优化实现的原因,无法对 CLOB 类型的列进行排序。相反,在 Oracle 数据库中,由于优化是在排序之前进行的,因此可以对 CLOB 类型的列进行排序。
解决方法
解决方法: 在 OceanBase 数据库中对于CLOB 类型的列查询语句中去除 ORDER BY 子句,避免对 CLOB 类型的列进行排序。
示例如下:
obclient [SYS]> SELECT clob_column FROM clob_table WHERE id =1;
输出结果如下:
+--------------+
| CLOB_COLUMN |
+--------------+
| aasdgasbasdg |
+--------------+
1 row in set (0.006 sec)