0

Visual Studio 2010、Oracle Database 10g、ライブラリ System.Data.OracleClient を使用しています。私の問題は、batabase でプロシージャを実行したいときに、オーバーフロー エラーが発生することです。私は読んでいて、数字が大きすぎるので、丸めたり切り捨てたりする必要があると言いました。しかし、プロシージャを変更するためにデータベースにアクセスできません。そして、私が取得する値は、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

どの出力パラメーターが問題であるかを特定できる場合は、このハックを試すことができます。SP を ADO.net から直接呼び出す代わりに、out パラメータを変更する関数 (trunc、round、または cast) を使用して、SP を呼び出す匿名の PL/SQL ブロックを含む SQL ステートメントを実行します。クエリの例:

"BEGIN PROCEDURE_NAME(?,?,?,TRUNC(?),?,?); END;"

于 2013-01-04T17:42:15.423 に答える