1

こんにちは、Oracle SQL 開発者で列を更新するストアド プロシージャを作成しようとしています。C# から関数を呼び出すと、次のエラーが表示されます。

ORA-06550: 行 5、列 3: PLS-00306: 'SP_UPDATEREFILLCHECKPLANSET' の呼び出しで引数の数または型が間違っています ORA-06550: 行 5、列 3: PL/SQL: ステートメントは無視されました

この問題の原因と解決方法を教えてください。

以下の手順:

create or replace
PROCEDURE SP_UPDATEREFILLCHECKPLANSET 
(
  In_MasterAdjustMaxRefillChecks IN "Ref_RefillCheckPlanSettings"."MasterAdjustMaxRefillChecks"%type,
  In_DefDaysBetweenRefillChecks IN "Ref_RefillCheckPlanSettings"."DefaultDaysBetweenRefillChecks"%type,
  In_MasterAdjustMaxNotices IN "Ref_RefillCheckPlanSettings"."MasterAdjustMaxNotices"%type,
  In_DefaultDaysBetweenNotices IN "Ref_RefillCheckPlanSettings"."DefaultDaysBetweenNotices"%type,
  In_DaysBefore1stRefillCheckNot IN "Ref_RefillCheckPlanSettings"."DaysBefore1stRefillCheckNotice"%type,
  In_SendNoticeIfPositiveBalance IN "Ref_RefillCheckPlanSettings"."SendNoticeIfPositiveBalance"%type,
  In_DefaultDaysAfterTermination IN "Ref_RefillCheckPlanSettings"."DefaultDaysAfterTermination"%type,
  In_EmergencyShutDown IN "Ref_RefillCheckPlanSettings"."EmergencyShutDown"%type,
  In_Reason IN "Ref_RefillCheckPlanSettings"."Reason"%type,
  In_MasterAmountOfPauses IN "Ref_RefillCheckPlanSettings"."MasterAmountOfPauses"%type,
  In_MaxAmountOfPauseDays IN "Ref_RefillCheckPlanSettings"."MaxAmountOfPauseDays"%type,
  In_Id IN NUMBER
)
AS 
BEGIN
UPDATE "Ref_RefillCheckPlanSettings"
  SET
    "MasterAdjustMaxRefillChecks" = In_MasterAdjustMaxRefillChecks,
    "DefaultDaysBetweenRefillChecks" = In_DefDaysBetweenRefillChecks,
    "MasterAdjustMaxNotices" = In_MasterAdjustMaxNotices,
    "DefaultDaysBetweenNotices" = In_DefaultDaysBetweenNotices,
    "DaysBefore1stRefillCheckNotice" = In_DaysBefore1stRefillCheckNot,
    "SendNoticeIfPositiveBalance" = In_SendNoticeIfPositiveBalance,
    "DefaultDaysAfterTermination" = In_DefaultDaysAfterTermination,
    "EmergencyShutDown" = In_EmergencyShutDown,
    "Reason" = In_Reason,
    "MasterAmountOfPauses" = In_MasterAmountOfPauses,
    "MaxAmountOfPauseDays" = In_MaxAmountOfPauseDays
    WHERE "Id" = In_Id;
END SP_UPDATEREFILLCHECKPLANSET;

update ストアド プロシージャの呼び出し。

public void UpdateRefillCheckPlanSettings(RefillCheckPlanSettings updatedSettings)
        {
            if (_dbConn.State != ConnectionState.Open)
            {
                _dbConn.Open();
            }

            const string command = "SP_UPDATEREFILLCHECKPLANSET";

            using (var oracleCommand = new OracleCommand(command, _dbConn))
            {
                oracleCommand.CommandType = CommandType.StoredProcedure;

                try
                {
                    oracleCommand.Parameters.AddWithValue("In_MasterAdjustMaxRefillChecks", updatedSettings.MasterAdjustMaxRefillChecks);
                    oracleCommand.Parameters.AddWithValue("In_DefDaysBetweenRefillChecks", updatedSettings.DefaultDaysBetweenRefillChecks);
                    oracleCommand.Parameters.AddWithValue("In_MasterAdjustMaxNotices", updatedSettings.MasterAdjustMaxNotices);
                    oracleCommand.Parameters.AddWithValue("In_DefaultDaysBetweenNotices", updatedSettings.DefaultDaysBetweenNotices);
                    oracleCommand.Parameters.AddWithValue("In_DaysBefore1stRefillCheckNot", updatedSettings.DaysBeforeFirstRefillCheckNotice);
                    oracleCommand.Parameters.AddWithValue("In_SendNoticeIfPositiveBalance", updatedSettings.SendNoticeIfPositiveBalance);
                    oracleCommand.Parameters.AddWithValue("In_DefaultDaysAfterTermination", updatedSettings.DefaultDaysAfterTermination);
                    oracleCommand.Parameters.AddWithValue("In_EmergencyShutDown", updatedSettings.EmergencyShutDown);
                    oracleCommand.Parameters.AddWithValue("In_Reason", updatedSettings.Reason);
                    oracleCommand.Parameters.AddWithValue("In_MasterAmountOfPauses", updatedSettings.MasterAmountOfPauses);
                    oracleCommand.Parameters.AddWithValue("In_MaxAmountOfPauseDays", updatedSettings.MaxAmountOfPauseDays);
                    oracleCommand.Parameters.AddWithValue("In_Id", updatedSettings.Id);
                    oracleCommand.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Log.Fatal("Couldn't update RefillCheckPlanSettings! RefillCheckPlanSettings: '" + updatedSettings.Id + "'", ex);
                }
            }

        }
4

1 に答える 1

0

このパラメーターに間違いがある可能性があります。

In_DaysBefore1stRefillCheckNot IN "Ref_RefillCheckPlanSettings"."DaysBefore1stRefillCheckNotice"%type,  
oracleCommand.Parameters.AddWithValue("In_DaysBefore1stRefillCheckNot", updatedSettings.DaysBeforeFirstRefillCheckNotice);

タイプ名が等しくないため:
DaysBefore* 1st *RefillCheckNotice != DaysBefore* First *RefillCheckNotice

于 2012-04-23T11:27:41.460 に答える