考虑到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
8条答案
按热度按时间gjmwrych1#
在我的例子中,我使用的是EntityFramework,我试图使用的列被称为
value
-即Oracle保留的关键字。zpf6vheq2#
一般来说,要解决这个问题,只需使用TO_CHAR,例如将日期转换为'DD/MM/RRR hh 24:mi:ss'格式。
gr8qqesn3#
不能在WHERE子句中放置CLOB。从documentation:
比较条件不支持大对象(LOB)。但是,可以使用PL/SQL程序对CLOB数据进行比较。
如果你的值总是小于4k,你可以用途:
不管怎么说,按CLOB搜索是很奇怪的..你能不能不按ID列搜索?
camsedfj4#
执行
SELECT DISTINCT ..., <CLOB_column>, ...
时也会出现相同的错误。如果此CLOB列在所有适用行中包含的值都短于VARCHAR2的限值,则可以使用
to_char(<CLOB_column>)
或将多次调用DBMS_LOB.SUBSTR(<CLOB_column>, ...)
的结果连接起来。iswrvxsc5#
取一个CLOB的substr,然后将其转换为char:
g9icjywg6#
我刚刚浏览了这一个,我偶然发现CLOB可以在like查询中使用:
这也适用于大于4K的CLOB
表演不会很好,但对我来说没有问题。
rhfm7lfc7#
我发现在CTE中选择
clob
列导致了这种爆炸。大概是因为Oracle不能处理临时表中的CLOB。
因为我的值大于4K,所以不能使用
to_char()
。我的工作是从最终的
select
中选择它,即如果这会导致性能问题,那就太糟糕了。
fcy6dtqo8#
问题可能在于所选的空值 与CLOB类型列组合。
我修改了游标。第一个游标由四个非空列组成。第二个游标选择三个非空列。空值 被注入到cursorForLoop中。