2
我在一個項目中使用實體框架和Oracle,並嘗試從EF調用存儲過程。該流程進行的實體框架和Oracle客戶端 - 存儲過程問題
Create or Replace Procedure usp_RotaPlateProductie_Select(
p_afdelingId in varchar2,
p_productTypeId in varchar2,
p_productieData out sys_refcursor)
IS
Begin
Open p_productieData for
Select rp.Batchnummer, cppo.Productnummer, p.Omschrijving, pra.Bruto_In_Meters
From Rotaplateproductie rp inner join Productieresultaatrtplrol pra
on rp.Batchnummer = pra.Batchnummer inner join Cpiplusproductieorder cppo
on pra.ProductieNummer = cppo.ProductNummer inner join Product p
on cppo.Productnummer = p.Productnummer Where rp.Afdelingid = p_afdelingId
and rp.producttype = p_productTypeId;
END;
但當EF執行我得到以下
ORA-06550: line 1, column 8:
PLS-00306: wrong number or types of arguments in call to 'USP_ROTAPLATEPRODUCTIE_SELECT.
ORA-06550: line 1, column 8:
PL/SQL: Statement IGNORED.
我使用下面的代碼調用這個程序錯誤的函數
public ObjectResult<RotaPlateProductie> Search_RotaPlateProductie(global::System.String p_AFDELINGID, global::System.String p_PRODUCTTYPEID)
{
ObjectParameter p_AFDELINGIDParameter;
if (p_AFDELINGID != null)
{
p_AFDELINGIDParameter = new ObjectParameter("P_AFDELINGID", p_AFDELINGID);
}
else
{
p_AFDELINGIDParameter = new ObjectParameter("P_AFDELINGID", typeof(global::System.String));
}
ObjectParameter p_PRODUCTTYPEIDParameter;
if (p_PRODUCTTYPEID != null)
{
p_PRODUCTTYPEIDParameter = new ObjectParameter("P_PRODUCTTYPEID", p_PRODUCTTYPEID);
}
else
{
p_PRODUCTTYPEIDParameter = new ObjectParameter("P_PRODUCTTYPEID", typeof(global::System.String));
}
return base.ExecuteFunction<RotaPlateProductie>("Search_RotaPlateProductie", p_AFDELINGIDParameter, p_PRODUCTTYPEIDParameter);
}
這裏RotaPlateProductie是我從中綁定結果集的實體 請幫忙。
你怎麼罵的程序?錯誤是說你用錯誤的數字或類型的參數來調用過程,你的過程的目的是什麼?你能提供更多細節嗎? – mcha
@mcha - 使用EF的函數導入,我在後面的Model代碼中取出SP,並使用Context.FunctionName我使用所需的輸入參數調用該過程。讓我知道如果你需要更多信息 – Maverick
請編輯你的問題,並添加設置參數並調用存儲過程的代碼。謝謝。此外,是否修改了此過程,並在導入後添加或刪除了一個參數? –