ORA-00932:不一致的数据类型:预期 - 获得CLOB

use*_*925 61 oracle clob

考虑到这TEST_SCRIPT就是CLOB 为什么当我从Oracle上的SQL*PLUS运行这个简单的查询时,我得到错误:

ORA-00932: inconsistent datatypes: expected - got CLOB
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关同一错误的很多问题,但没有一个是从SQLPLUS运行直接查询

    UPDATE IMS_TEST 
       SET TEST_Category  = 'just testing'  
     WHERE TEST_SCRIPT    = 'something'
       AND ID             = '10000239' 
Run Code Online (Sandbox Code Playgroud)

完整示例:

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
Run Code Online (Sandbox Code Playgroud)

Cra*_*aig 63

您不能将CLOB放在WHERE子句中.从文档:

比较条件不支持大对象(LOB).但是,您可以使用PL/SQL程序来比较CLOB数据.

如果您的值始终小于4k,则可以使用:

UPDATE IMS_TEST 
   SET TEST_Category           = 'just testing'  
 WHERE to_char(TEST_SCRIPT)    = 'something'
   AND ID                      = '10000239';
Run Code Online (Sandbox Code Playgroud)

无论如何都要通过CLOB进行搜索很奇怪..你能不能只通过ID列进行搜索?

  • 如果你的值可能超过4K,你可以使用`where dbms_lob.compare(testscript,:var2)= 0`见http://stackoverflow.com/a/12590223/1845672 (8认同)
  • “比较条件”还包括`SELECT DISTINCT`和`GROUP BY` (2认同)

Fra*_*nič 25

这样做时也会发生同样的错误SELECT DISTINCT ..., <CLOB_column>, ....

如果此CLOB列包含所有适用行中VARCHAR2的限制值,则可以使用to_char(<CLOB_column>)或连接多个调用的结果DBMS_LOB.SUBSTR(<CLOB_column>, ...).

  • 也适用于“GROUP BY”子句中的 CLOB。同样的原因。:-) (3认同)

小智 12

获取CLOB的substr,然后将其转换为char:

UPDATE IMS_TEST 
  SET TEST_Category           = 'just testing' 
WHERE to_char(substr(TEST_SCRIPT, 1, 9))    = 'something'
  AND ID                      = '10000239';
Run Code Online (Sandbox Code Playgroud)


Tur*_*uro 5

我刚刚浏览了这个,偶然发现 CLOB 可以在类似的查询中使用:

   UPDATE IMS_TEST 
   SET TEST_Category  = 'just testing'  
 WHERE TEST_SCRIPT    LIKE '%something%'
   AND ID             = '10000239' 
Run Code Online (Sandbox Code Playgroud)

这也适用于大于 4K 的 CLOB

性能不会很好,但对我来说这不是问题。