77

これTEST_SCRIPTCLOB 理由で、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
4

7 に答える 7

78

CLOB を WHERE 句に入れることはできません。ドキュメントから:

ラージ オブジェクト (LOB) は、比較条件ではサポートされていません。ただし、CLOB データの比較には PL/SQL プログラムを使用できます。

値が常に 4k 未満の場合は、次を使用できます。

UPDATE IMS_TEST 
   SET TEST_Category           = 'just testing'  
 WHERE to_char(TEST_SCRIPT)    = 'something'
   AND ID                      = '10000239';

とにかくCLOBで検索するのは奇妙です.. ID列だけで検索できませんか?

于 2012-10-19T18:46:41.443 に答える
43

を行っても同様のエラーが発生しますSELECT DISTINCT ..., <CLOB_column>, ...

この CLOB 列に、該当するすべての行で VARCHAR2 の制限よりも短い値が含まれている場合は、to_char(<CLOB_column>)への複数の呼び出しの結果を使用または連結できますDBMS_LOB.SUBSTR(<CLOB_column>, ...)

于 2015-11-20T12:54:53.477 に答える
12

CLOB の substr を取得して、char に変換します。

UPDATE IMS_TEST 
  SET TEST_Category           = 'just testing' 
WHERE to_char(substr(TEST_SCRIPT, 1, 9))    = 'something'
  AND ID                      = '10000239';
于 2015-06-24T19:38:34.693 に答える
2

clobCTE で列を選択すると、この爆発が発生することがわかりました。すなわち

with cte as (
    select
        mytable1.myIntCol,
        mytable2.myClobCol
    from mytable1
    join mytable2 on ...
)
select myIntCol, myClobCol
from cte
where ...

おそらく、オラクルが一時テーブルのCLOBを処理できないためです。

私の値は 4K を超えていたため、使用できませんでしto_char()た。私の回避策は、最終的
なものから選択することでした。select

with cte as (
    select
        mytable1.myIntCol
    from mytable1
)
select myIntCol, myClobCol
from cte
join mytable2 on ...
where ...

これによりパフォーマンスの問題が発生する場合は残念です。

于 2018-10-29T05:38:42.093 に答える
1

問題は、CLOB 型の列と組み合わせて選択された null 値にある可能性があります。

select valueVarchar c1 ,
       valueClob c2 ,
       valueVarchar c3 ,
       valueVvarchar c4
of Table_1
union
select valueVarchar c1 ,
       valueClob c2 ,
       valueVarchar c3 ,
       null c4
of table_2

カーソルを作り直しました。最初のカーソルは、NULL 以外の 4 つの列で構成されます。2 番目のカーソルは、null 以外の 3 つの列を選択します。null 値が cursorForLoop に挿入されました。

于 2015-12-14T11:51:53.417 に答える