0

我有一个表SyncTokenLock,其中包含lockNameCLOB 类型的列。当我从 SQLDeveloper 运行以下查询时 -

select * from SyncTokenLock where 
lockName='com.vmware.horizon.datastore.impl.ProvisioningStateDataServiceImpl';

我得到以下异常 -

ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 -  "inconsistent datatypes: expected %s got %s"

当通过 Hibernate (3.6.10) 针对 Oracle 11g 执行此查询时,我得到类似的错误。Hibernate 抛出以下异常 -

ORA-00932: inconsistent datatypes: expected - got CLOB 

任何想法可能是什么原因。

4

2 回答 2

0

正确,您不能在 WHERE 子句中将相等与 CLOB 一起使用。但是你可以这样做:

SELECT * FROM SyncTokenLock 
 WHERE dbms_lob.substr(lockName, 100) = 
           'com.vmware.horizon.datastore.impl.ProvisioningStateDataServiceImpl';

您的专栏真的需要成为 CLOB 吗?您是否期望超过 4000 个字符的值?如果没有,请使用 VARCHAR2。

于 2012-08-02T00:21:57.447 回答
0

您可以不使用等号,而是使用like

select * from SyncTokenLock where lockName like 'com.vmware.horizon.datastore.impl.ProvisioningStateDataServiceImpl';
于 2017-11-20T12:22:28.207 回答