{"ORA-06550: 第 1 行, 第 7 列: \nPLS-00306: 调用 'PROC_APPNOLIST' 时参数个数或类型错误\nORA-06550: 第 1 行, 第 7 列: \nPL/SQL: Statement ignored\n"}
OracleParameter[] pm = new OracleParameter[7]; pm[0] = new OracleParameter("cardno", OracleType.VarChar,10);
pm[0].Direction = ParameterDirection.Input;
pm[0].Value = cardNo; pm[1] = new OracleParameter("userid", OracleType.VarChar, 20);
pm[1].Direction = ParameterDirection.Input;
pm[1].Value = userID; pm[2] = new OracleParameter("secrityno", OracleType.VarChar, 32);
pm[2].Direction = ParameterDirection.Input;
pm[2].Value = secrityNo; pm[3] = new OracleParameter("cardserno", OracleType.VarChar, 32);
pm[3].Direction = ParameterDirection.Input;
pm[3].Value = cardSerNo; pm[4] = new OracleParameter("curout", OracleType.Cursor);
pm[4].Direction = ParameterDirection.Output; pm[5] = new OracleParameter("resultcode", OracleType.Int16);
pm[5].Direction = ParameterDirection.Output; pm[6] = new OracleParameter("errormsg", OracleType.VarChar, 200);
pm[6].Direction = ParameterDirection.Output;
#endregion DataSet ds = new DataSet(); using (OracleConnection conn = new OracleConnection(strConn))
{
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "pkg_autobillservice.proc_getbillinfo";
//cmd.Parameters.AddRange(pm);
foreach (OracleParameter om in pm)
{
cmd.Parameters.Add(om);
}
OracleDataAdapter oda = new OracleDataAdapter(cmd);
oda.Fill(ds, "table");
}
catch (Exception e)
{
throw e;
}
}
在oda.Fill(ds,"table") 处,
一下是存储过程。PROCEDURE proc_getbillinfo(patientid IN VARCHAR2,
userid IN VARCHAR2,
password IN VARCHAR2,
cardserno IN VARCHAR2,
curout OUT ref_cur,
resultcode OUT INTEGER,
errormsg OUT VARCHAR2) AS
v_sql VARCHAR2(2000);
BEGIN
proc_cardcheck(patientid, password, cardserno, resultcode); IF resultcode <> 0 THEN
resultcode := 1;
errormsg := 'HIS:卡验证失败!!';
RETURN;
END IF; v_sql := 'select item_code,item_name,item_class,class_name,
costs,amount,dept_name,rcptgroupid
from v_outp_orders_costs
WHERE patient_id = :cardno';
OPEN curout FOR v_sql
USING patientid; resultcode := 0;
errormsg := '';
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
resultcode := 1;
errormsg := SQLERRM;
END proc_getbillinfo;
OracleParameter[] pm = new OracleParameter[7]; pm[0] = new OracleParameter("cardno", OracleType.VarChar,10);
pm[0].Direction = ParameterDirection.Input;
pm[0].Value = cardNo; pm[1] = new OracleParameter("userid", OracleType.VarChar, 20);
pm[1].Direction = ParameterDirection.Input;
pm[1].Value = userID; pm[2] = new OracleParameter("secrityno", OracleType.VarChar, 32);
pm[2].Direction = ParameterDirection.Input;
pm[2].Value = secrityNo; pm[3] = new OracleParameter("cardserno", OracleType.VarChar, 32);
pm[3].Direction = ParameterDirection.Input;
pm[3].Value = cardSerNo; pm[4] = new OracleParameter("curout", OracleType.Cursor);
pm[4].Direction = ParameterDirection.Output; pm[5] = new OracleParameter("resultcode", OracleType.Int16);
pm[5].Direction = ParameterDirection.Output; pm[6] = new OracleParameter("errormsg", OracleType.VarChar, 200);
pm[6].Direction = ParameterDirection.Output;
#endregion DataSet ds = new DataSet(); using (OracleConnection conn = new OracleConnection(strConn))
{
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "pkg_autobillservice.proc_getbillinfo";
//cmd.Parameters.AddRange(pm);
foreach (OracleParameter om in pm)
{
cmd.Parameters.Add(om);
}
OracleDataAdapter oda = new OracleDataAdapter(cmd);
oda.Fill(ds, "table");
}
catch (Exception e)
{
throw e;
}
}
在oda.Fill(ds,"table") 处,
一下是存储过程。PROCEDURE proc_getbillinfo(patientid IN VARCHAR2,
userid IN VARCHAR2,
password IN VARCHAR2,
cardserno IN VARCHAR2,
curout OUT ref_cur,
resultcode OUT INTEGER,
errormsg OUT VARCHAR2) AS
v_sql VARCHAR2(2000);
BEGIN
proc_cardcheck(patientid, password, cardserno, resultcode); IF resultcode <> 0 THEN
resultcode := 1;
errormsg := 'HIS:卡验证失败!!';
RETURN;
END IF; v_sql := 'select item_code,item_name,item_class,class_name,
costs,amount,dept_name,rcptgroupid
from v_outp_orders_costs
WHERE patient_id = :cardno';
OPEN curout FOR v_sql
USING patientid; resultcode := 0;
errormsg := '';
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
resultcode := 1;
errormsg := SQLERRM;
END proc_getbillinfo;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货