获取ORA-00932:不一致的数据类型错误

时间:2017-11-09 06:05:27

标签: c# oracle

当我在Windows 2008 R2 Enterprise中运行程序时出现以下错误,我在Windows 10上运行时没有出现ant错误。

  

System.Data.OracleClient.OracleException:ORA-00932:不一致   数据类型   System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle   errorHandle,Int32 rc)at   System.Data.OracleClient.OracleDataReader.ReadInternal()at   System.Data.OracleClient.OracleDataReader.Read()......

我的代码是:

cmdExpressContainer.CommandText = "SELECT IU.ID EQ_NBR,IF.TIME_IN disch_time,IU.CATEGORY CAT,MV.TO_POS_NAME AS DISCHARGE_LOCATION " +
                                    "FROM INV_UNIT IU  " +
                                    "JOIN INV_UNIT_FCY_VISIT IF ON IF.UNIT_GKEY=IU.GKEY  " +
                                    "JOIN ARGO_CARRIER_VISIT CV ON CV.GKEY=IF. ACTUAL_OB_CV OR CV.GKEY=IF. ACTUAL_IB_CV  " +
                                    "JOIN inv_move_EVENT MV ON MV.UFV_GKEY=IF.GKEY  " +
                                    "JOIN VSL_VESSEL_VISIT_DETAILS  VVD ON VVD.VVD_GKEY=CV.CVCVD_GKEY  " +
                                    "JOIN VSL_VESSELS  VV ON VV.GKEY=VVD.VESSEL_GKEY  " +
                                    "WHERE CV.ID='" + tVoyageRef + "' AND MV.MOVE_KIND IN('DSCH') AND IU.CATEGORY='IMPRT'";



using (OracleDataReader drExpContainer = cmdExpressContainer.ExecuteReader())
{
    while (drExpContainer.Read())
    {
        //
    }
}

我不明白为什么这在我的电脑上运行(Windows 10)并在其他电脑(Windows 2008 R2)中出错。

我在这一行中收到了这个错误:

drExpContainer.Read()

1 个答案:

答案 0 :(得分:0)

ORA-932意味着您尝试使用一些具有不兼容参数的二进制操作,比如要求乘以日期和字符值。您应该在SQL语句中查看这些操作并仔细检查参数数据类型;也许你应该避免隐式数据类型转换并使用显式的to_char,to_number等。

在查询时,有时会发生SQL语句在一个数据库会话中工作而在其他数据库会话中失败。如果这些会话使用不同的执行计划,则会因数据魔法而发生。让我们看一下简化的例子:

SQL> create table t$(i integer, j varchar2(10 char));

Table created

SQL> insert into t$ values (1, 'abc');

1 row inserted

SQL> select * from t$ where i = 2 and to_number(j) = 8;

此声明通常不正确。如果Oracle在'j'之前检查'i'条件,它可能会有效,如果Oracle决定先检查'j',它将失败。会用哪种方式?它取决于执行计划,而执行计划依赖于优化器模式和其他设置,并且在不同的会话中可能不同。