考虑到TEST_SCRIPT是一个CLOB,所以当我在Oracle上从SQL*PLUS运行这个简单的查询时,我得到以下错误:
ORA-00932: inconsistent datatypes: expected - got CLOB我已经阅读了很多关于同一错误的问题,但这些问题都没有运行来自SQLPLUS的直接查询
UPDATE IMS_TEST
SET TEST_Category = 'just testing'
WHERE TEST_SCRIPT = 'something'
AND ID = '10000239' 完整示例:
SQL> create table ims_test(
2 test_category varchar2(30),
3 test_script clob,
4 id varchar2(30)
5 );
Table created.
SQL> insert into ims_test values ('test1','something','10000239');
1 row created.
SQL> UPDATE IMS_TEST
2 SET TEST_Category = 'just testing'
3 WHERE TEST_SCRIPT = 'something'
4 AND ID = '10000239';
WHERE TEST_SCRIPT = 'something'
*
ERROR at line 3:
ORA-00932: inconsistent datatypes: expected - got CLOB发布于 2012-10-20 02:46:41
不能将CLOB放在WHERE子句中。从documentation
比较条件中不支持
大型对象(LOB)。但是,您可以使用PL/SQL程序对CLOB数据进行比较。
如果您的值始终小于4k,则可以使用:
UPDATE IMS_TEST
SET TEST_Category = 'just testing'
WHERE to_char(TEST_SCRIPT) = 'something'
AND ID = '10000239';无论如何,通过CLOB进行搜索是很奇怪的。你能不能不要只按ID栏搜索?
发布于 2015-11-20 20:54:53
执行SELECT DISTINCT ..., <CLOB_column>, ...时也会出现相同的错误。
如果此CLOB列在所有适用行中包含的VARCHAR2值小于limit,则可以使用to_char(<CLOB_column>)或连接多个DBMS_LOB.SUBSTR(<CLOB_column>, ...)调用的结果。
发布于 2015-06-25 03:38:35
获取CLOB的子字符串,然后将其转换为char:
UPDATE IMS_TEST
SET TEST_Category = 'just testing'
WHERE to_char(substr(TEST_SCRIPT, 1, 9)) = 'something'
AND ID = '10000239';https://stackoverflow.com/questions/12980038
复制相似问题