0

我正在使用 Visual Studio 2010、Oracle 数据库 10g 和库 System.Data.OracleClient。我的问题是当我想在 batabase 中执行程序时,我得到一个溢出错误。我正在阅读并说我需要 ROUND 或 TRUNCT 数字,因为它太大了。但我无权访问数据库来更改程序。我得到的值来自带有 Out Direction 的 OracleParameter。你知道我该如何解决这个问题吗?

objCommand.Connection = objConnection;
objCommand.CommandText = "Procedure_name";
objCommand.CommandType = CommandType.StoredProcedure;
objCommand.Parameters.AddRange(parameters); //parameters is a OracleParameter array. I fill it previously.

objConnection.Open();
objCommand.ExecuteNonQuery(); //Here throw the exception

PS:程序在 PL/SQL 中完美运行,最大数量。数字是“1.66529411764706”;

PS2:同样,我没有更改程序的权限。我需要在 Visual Studio 中修复此错误。

PS3:错误是OCI-22053:溢出错误。这就是我从错误中得到的全部:(

谢谢!

parameters[0] = CreateParameter(PC_COD_CU, OracleType.VarChar, codCu);
parameters[1] = CreateParameter(PC_COD_EM, OracleType.VarChar, codEm);
parameters[2] = CreateParameter(PN_SACIC, OracleType.Number, ParameterDirection.Output);
parameters[3] = CreateParameter(PN_SAVSF, OracleType.Number, ParameterDirection.Output);
parameters[4] = CreateParameter(PN_MTO_B, OracleType.Number, ParameterDirection.Output);
parameters[5] = CreateParameter(PN_ULT_REM, OracleType.Number, ParameterDirection.Output);
parameters[6] = CreateParameter(PN_AVG_REM, OracleType.Number, ParameterDirection.Output);
parameters[7] = CreateParameter(PN_TO_SEG, OracleType.Number, ParameterDirection.Output);
parameters[8] = CreateParameter(PN_TA_APL, OracleType.Number, ParameterDirection.Output);
parameters[9] = CreateParameter(PN_TA_D, OracleType.Number, ParameterDirection.Output);
parameters[10] = CreateParameter(PN_DEV_ULT, OracleType.Number, ParameterDirection.Output);
parameters[11] = CreateParameter(PC_TO_F_OBL, OracleType.VarChar, ParameterDirection.Output);
parameters[12] = CreateParameter(PC_TO_F_VCF, OracleType.VarChar, ParameterDirection.Output);
parameters[13] = CreateParameter(PC_TO_F_VSF, OracleType.VarChar, ParameterDirection.Output);
parameters[14] = CreateParameter(PN_RA_MIN_VIG, OracleType.Number, ParameterDirection.Output);
parameters[15] = CreateParameter(PC_PE_MIN_SPP, OracleType.VarChar, ParameterDirection.Output);
parameters[16] = CreateParameter(PC_IND_CON_RES, OracleType.VarChar, ParameterDirection.Output);
parameters[17] = CreateParameter(PC_NUM_RES, OracleType.VarChar, ParameterDirection.Output);
parameters[18] = CreateParameter(PN_VA_NO_RES, OracleType.Number, ParameterDirection.Output);
parameters[19] = CreateParameter(PC_ME, OracleType.VarChar, ParameterDirection.Output);
parameters[20] = CreateParameter(PN_GA_SEP, OracleType.Number, ParameterDirection.Output);
parameters[21] = CreateParameter(PC_TO_TRA, OracleType.VarChar, ParameterDirection.Output);
parameters[22] = CreateParameter(PC_TO_BO, OracleType.VarChar, ParameterDirection.Output);
parameters[23] = CreateParameter(PN_PSEG_NO_D_MIN, OracleType.Number, ParameterDirection.Output);
parameters[24] = CreateParameter(PN_PSEG_NO_D_AVG, OracleType.Number, ParameterDirection.Output);
parameters[25] = CreateParameter(PN_PSEG_AJU_S_MIN, OracleType.Number, ParameterDirection.Output);
parameters[26] = CreateParameter(PN_PSEG_AJU_S_AVG, OracleType.Number, ParameterDirection.Output);
parameters[27] = CreateParameter(PN_PSEG_AJU_D_MIN, OracleType.Number, ParameterDirection.Output);
parameters[28] = CreateParameter(PN_PSEG_AJU_D_AVG, OracleType.Number, ParameterDirection.Output);
parameters[29] = CreateParameter(PN_PAJU_AU_S, OracleType.Number, ParameterDirection.Output);
parameters[30] = CreateParameter(PN_PAJU_AU_D, OracleType.Number, ParameterDirection.Output);
parameters[31] = CreateParameter(PN_PRP, OracleType.Number, ParameterDirection.Output);
parameters[32] = CreateParameter(PN_PJAN, OracleType.Number, ParameterDirection.Output);
parameters[33] = CreateParameter(PN_MON_TO_CAM, OracleType.Number, ParameterDirection.Output);
parameters[34] = CreateParameter(RETURN_VALUE, OracleType.Number, ParameterDirection.ReturnValue);

所有参数名称都是先前设置的字符串。

4

1 回答 1

0

如果您可以确定哪个输出参数是问题,您可以尝试这个 hack。不是直接从 ADO.net 调用 SP,而是执行一条 SQL 语句,该语句包含一个调用 SP 的匿名 PL/SQL 块,并带有一个函数来修改输出参数(trunc、round 或 cast)。示例查询:

“BEGIN PROCEDURE_NAME(?,?,?,TRUNC(?),?,?); END;”

于 2013-01-04T17:42:15.423 回答