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);
}
}
}
您传递MasterAdjustMaxNotices,但将其分配给“MasterAdjustMaxNotices”= In_DefaultDaysBetweenNotices,“DefaultDaysBetweenNot ices“= In_DefaultDaysBetweenNotices,在更新语句中? – Milee 2012-04-23 11:09:13
你的权利,但没有解决问题。自我修改代码以来,我更新了questin。代码中的错误已更正,但旧错误仍然存在 – user473104 2012-04-23 11:24:44
此过程是独立的还是包的一部分? – 2012-04-23 11:29:55