我检查了许久,还是报这个错:PLS-00306: 调用 时参数个数或类型错误

heavyrain1234 北京鄂尔多斯创展服装有限公司 信息系统负责人  2018-04-14 06:30:15
我检查了许久,还是报这个错:PLS-00306: 调用 时参数个数或类型错误
oralcle:

create or replace procedure fyerp.AAA_xst13
( sessionkey varchar2, --网店名称
ls_kcckdm varchar2, --门店代码(仓库代码)
ls_PurchaseCode varchar2, -- 平台订单号
ls_sku varchar2, --商品代码
ldec_amount number, --订购数量
ldec_price number,--价格
ldec_xsyhzk number,--折扣
ldec_xsyhje number,--实际金额
ldec_dpj number,
ldec_zk number,
ll_i number ,--订单行号
ls_czhm_yh out varchar2, -- 操作号码订单主键
an_errorcode out number, -- 错误代码,如果没有错误 an_errorcode 为0, as_errormsg 均为空
as_errormsg out varchar2 -- 返回错误消息
)


OracleCommand cmdXst13 = YHJ_StoredProcedure.ConnectionJie.CreateCommand(); cmdXst13.Transaction = YHJ_StoredProcedure.myTrans; cmdXst13.CommandType = CommandType.StoredProcedure; cmdXst13.CommandText=strStoredProcedureXst13;
OracleParameter[] paraXst13 ={
new OracleParameter("sessionkey",OracleType.VarChar,50),//0
new OracleParameter("ls_kcckdm",OracleType.VarChar,50),//1
new OracleParameter("ls_PurchaseCode",OracleType.VarChar,50),//2 OracleType.Int32
new OracleParameter("ls_sku",OracleType.VarChar,50),//3
new OracleParameter("ldec_amount",OracleType.Int32),//4
new OracleParameter("ldec_price",OracleType.Int32),//5
new OracleParameter("ldec_xsyhzk",OracleType.Int32),//6
new OracleParameter("ldec_xsyhje",OracleType.Int32),//7
new OracleParameter("ldec_dpj",OracleType.Int32),//8
new OracleParameter("ldec_zk",OracleType.Int32),//9 OracleType.Int32
new OracleParameter("ll_i",OracleType.Int32),//10 OracleType.Int32
new OracleParameter("ls_czhm_yh",OracleType.VarChar,50),//11
new OracleParameter("an_errorcode",OracleType.Int32),//12
new OracleParameter("as_errormsg",OracleType.VarChar,50)//13
};
...
paraXst13[0].Value = "北京特卖店";
if (strDelivertype.Contains("2000")) //2000为 快递,没有店铺号,1000为自提。
{ paraXst13[1].Value = "ZV035"; paraXst13[2].Value = "ZV035"; }
else
{ paraXst13[1].Value = strShope_code.Trim(); paraXst13[2].Value = str_no.Trim().Trim(); paraXst13[12].Value = -1; } paraXst13[3].Value = str_sku;
paraXst13[4].Value =Convert.ToInt32(str_qty); paraXst13[5].Value =Convert.ToInt32(strSumje); paraXst13[6].Value = 0; paraXst13[7].Value =Convert.ToInt32(strYfkej);// strRecieve_people --strYfkej*100 / strSumje
paraXst13[8].Value = 0; paraXst13[9].Value = 0; paraXst13[10].Value = 1; paraXst13[11].Value = strkcczhm.Trim();// strSumje
paraXst13[12].Value = 0; paraXst13[13].Value = "";
paraXst13[0].Direction = ParameterDirection.Input; paraXst13[1].Direction = ParameterDirection.Input; paraXst13[2].Direction = ParameterDirection.Input;
paraXst13[3].Direction = ParameterDirection.Input; paraXst13[4].Direction = ParameterDirection.Input; paraXst13[5].Direction = ParameterDirection.Input;
paraXst13[6].Direction = ParameterDirection.Input; paraXst13[7].Direction = ParameterDirection.Input; paraXst13[8].Direction = ParameterDirection.Input;
paraXst13[9].Direction = ParameterDirection.Input; paraXst13[10].Direction = ParameterDirection.Input; paraXst13[11].Direction = ParameterDirection.InputOutput;
paraXst13[12].Direction = ParameterDirection.InputOutput; paraXst13[13].Direction = ParameterDirection.InputOutput;
for (int i = 0; i < paraXst13.Length; i++)
{
// OracleParameter pp = (OracleParameter)((ICloneable)parameter).Clone(); //防止报另一个 sqlparametercollection 中已包含 sqlparameter。错误。
cmdXst13.Parameters.Add(paraXst13[i]);
stringaa = stringaa + "paraXst13:" + paraXst13[i].ParameterName + "," + paraXst13[i].DbType + "," + "#" + i.ToString() + "#" + paraXst13[i].Value + ";"; i = i + 1;
}
cmdXst13.ExecuteNonQuery();//执行完这句报错:PLS-00306: 调用 时参数个数或类型错误

...全文
339 点赞 收藏 3
写回复
3 条回复
heavyrain1234 2018年04月14日
感谢上述高手的指导,没有他的提示,我估计是很难找到这个点的,都困扰我好长一段时间了。
回复 点赞
qq_29928183 2018年04月14日
stringaa = stringaa + "paraXst13:" + paraXst13[i].ParameterName + "," + paraXst13[i].DbType + "," + "#" + i.ToString() + "#" + paraXst13[i].Value + ";"; i = i + 1; //这里最右边多了个i=i+1;这个i 和循环变量同名,导致循环少执行了一半,也就导致了有一般的参数,有值,另一部分是NULL(没有赋值)。所以就报错了。
回复 点赞
heavyrain1234 2018年04月14日
找到问题所在了:

stringaa = stringaa + "paraXst13:" + paraXst13[i].ParameterName + "," + paraXst13[i].DbType + "," + "#" + i.ToString() + "#" + paraXst13[i].Value + ";"; i = i + 1;  //这里最右边多了个i=i+1;这个i 和循环变量同名,导致循环少执行了一半,也就导致了有一般的参数,有值,另一部分是NULL(没有赋值)。所以就报错了。
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告