当我在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()
答案 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',它将失败。会用哪种方式?它取决于执行计划,而执行计划依赖于优化器模式和其他设置,并且在不同的会话中可能不同。