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: 转换请求无法实施或不合理

posted @ 2022-11-18 16:34  新*  阅读(3085)  评论(0编辑  收藏  举报