0

CLOB型のSyncTokenLock列を持つテーブルがあります。lockNameSQLDeveloperから次のクエリを実行すると-

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"

このクエリをOracle11gに対してHibernate(3.6.10)を介して実行すると、同様のエラーが発生します。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 に答える