我正在使用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,则不能像这样绑定。也许你应该为程序提供实际的创建声明。 –