tipos tipo ora number inconsistentes inconsistent got expected dato datatypes oracle clob

oracle - tipo - ora-00932: inconsistent datatypes: expected-got-



ORA-00932: tipos de datos inconsistentes: esperado-obtuvo CLOB (5)

Teniendo en cuenta que TEST_SCRIPT es un CLOB cuando ejecuto esta simple consulta desde SQL * PLUS en Oracle, aparece el siguiente error:

ORA-00932: inconsistent datatypes: expected - got CLOB

He estado leyendo muchas preguntas sobre el mismo error, pero ninguna de ellas está ejecutando una consulta directa de SQLPLUS

UPDATE IMS_TEST SET TEST_Category = ''just testing'' WHERE TEST_SCRIPT = ''something'' AND ID = ''10000239''

Ejemplo completo:

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


Acabo de revisar este y descubrí accidentalmente que los CLOB se pueden usar en una consulta similar:

UPDATE IMS_TEST SET TEST_Category = ''just testing'' WHERE TEST_SCRIPT LIKE ''%something%'' AND ID = ''10000239''

Esto funcionó también para CLOB mayores a 4K

El rendimiento no será bueno, pero eso no fue problema en mi caso.


El mismo error ocurre también al hacer SELECT DISTINCT ..., <CLOB_column>, ...

Si esta columna CLOB contiene valores más cortos que el límite para VARCHAR2 en todas las filas aplicables, puede usar to_char(<CLOB_column>) o concatenar los resultados de varias llamadas a DBMS_LOB.SUBSTR(<CLOB_column>, ...) .


El problema puede residir en los valores nulos seleccionados en combinación con una columna de tipo CLOB.

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

Rehice el cursor. El primer cursor se compone de cuatro columnas no nulas. El segundo cursor selecciona tres columnas no nulas. Los valores nulos se inyectaron en el cursorForLoop.


No puede poner un CLOB en la cláusula WHERE. De la documentation :

Los objetos grandes (LOB) no son compatibles en condiciones de comparación. Sin embargo, puede usar programas PL / SQL para realizar comparaciones en datos CLOB.

Si sus valores son siempre inferiores a 4k, puede usar:

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

Es extraño buscar por un CLOB de todos modos ... ¿no podrías simplemente buscar por la columna de ID?


Tome un substr de CLOB y luego conviértalo en un char:

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