2012-04-23 182 views
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; 

到更新存储过程的调用。

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); 
       } 
      } 

     } 
+0

您传递MasterAdjustMaxNotices,但将其分配给“MasterAdjustMaxNotices”= In_DefaultDaysBetweenNotices,“DefaultDaysBetweenNot ices“= In_DefaultDaysBetweenNotices,在更新语句中? – Milee 2012-04-23 11:09:13

+0

你的权利,但没有解决问题。自我修改代码以来,我更新了questin。代码中的错误已更正,但旧错误仍然存​​在 – user473104 2012-04-23 11:24:44

+0

此过程是独立的还是包的一部分? – 2012-04-23 11:29:55

回答

0

这是可能的,错就错在这个参数:

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

因为类型名称不相同:
剩余天数* * RefillCheckNotice =剩余天数* 首先! * RefillCheckNotice

相关问题