我正在使用Dapper和ODP.Net來調用存儲過程。 我覺得愚蠢沒有發現有什麼錯我的參數,但這裏有雲:Oracle錯誤:PLS-00306:錯誤的參數數量或類型
這裏是存儲過程簽名:
PROCEDURE SP_NETWORK_GETALL(UserLogon IN VARCHAR2, NetworkVersionList OUT refCursor)
這裏是我的。NET電話:
using (var conn = new OracleConnection(connString))
{
var parameters = new List<OracleParameter>
{
new OracleParameter()
{
Direction = ParameterDirection.Input,
ParameterName = "UserLogon",
OracleDbType = OracleDbType.Varchar2,
Size = 4000,
Value = "TEST"
},
new OracleParameter()
{
Direction = ParameterDirection.Output,
OracleDbType = OracleDbType.RefCursor,
ParameterName = "NetworkVersionList",
Value = DBNull.Value
},
};
var results = conn.Query("SDTM.PKG_SP_GET.SP_NETWORK_GETALL", parameters, commandType: CommandType.StoredProcedure);
}
我試過這個存儲過程,它的工作原理。我已經使用Dapper處理其他存儲過程,它也可以。我試着改變參數的順序(第一個參考光標),設置VarChar2參數的大小與否,參考光標是否爲DBNull.Value。
我已經看到了成千上萬個問題是這樣一個計算器上或在互聯網上,但我不能在這裏看到的參數不匹配......
是否需要模式名稱? – kevinsky
嗯,我只是嘗試沒有模式名稱,我得到了同樣的錯誤,所以我不認爲這是問題... –
這種錯誤的通常原因是因爲ODP.NET默認綁定的位置,而不是參數名稱。這似乎不是問題,但爲了防止您提供給我們的過程不是真正的過程,請確保按正確順序綁定或將Bindbyname設置爲true。接下來,確保「refcursor」是一個oracle類型。我雖然正確的類型是SYS_Refcursor。如果它實際上是用戶定義的類型,而不是簡單的ref_cursor,則不能像這樣綁定。也許你應該爲程序提供實際的創建聲明。 –