ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB/ORA-01460: 转换请求无法实施或不合理
最近公司软件中某功能在使用时报错了:
ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB
看了一下SQL如下:
SELECT DISTINCT CLOB字段 FROM ( SELECT CLOB字段 FROM 表A WHERE CLOB字段 LIKE :Value UNION ALL SELECT CLOB字段 FROM 表B WHERE CLOB字段 LIKE :Value ) WHERE ROWNUM <= 10 ORDER BY CLOB字段
字段是根据不同的表赋值的,一般字段类型都是NVARCHAR2,但是这个字段类型为CLOB,在Navicat运行发现有两个问题:ORDER BY以及DISTINCT作用于CLOB字段会报错:ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB,遇到CLOB字段把ORDER BY/DISTINCT去掉就可以了。
于是做了个判断,先去查询字段类型(注意:表名和字段名需要大写):
SELECT DATA_TYPE FROM ALL_TAB_COLS WHERE TABLE_NAME = '表名' AND COLUMN_NAME ='字段名'
再去根据取得的DATA_TYPE,来分别对SQL语句赋值。
赋值参数的时候最好也要分别赋值,
NVARCHAR2直接赋值就可以了
paramList.Add(new OracleParameter(":Value", "****"));
CLOB字段参数类型定义为CLOB
var p = new OracleParameter(":Value", OracleType.Clob); p.Value = "****"; paramList.Add(p);
否则会出现ORA-01460: 转换请求无法实施或不合理