C# 调用oracle 存储过程 报错PLS-00306: wrong number or types of arguments in call to 'FETCH_INP_FEE'

C#OracleParameterp1=newOracleParameter("t1",OracleType.VarChar);OracleParameterp2=new... C#
OracleParameter p1 = new OracleParameter("t1", OracleType.VarChar);
OracleParameter p2 = new OracleParameter("t2", OracleType.Number);
OracleParameter p3 = new OracleParameter("t3", OracleType.VarChar,20);
OracleParameter p4 = new OracleParameter("t4", OracleType.Number);
OracleParameter p5 = new OracleParameter("t5", OracleType.Number);
OracleParameter p6 = new OracleParameter("t6", OracleType.Number);
OracleParameter p7 = new OracleParameter("t7", OracleType.Number);
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.Input;
p3.Direction = ParameterDirection.Output;
p4.Direction = ParameterDirection.Output;
p5.Direction = ParameterDirection.Output;
p6.Direction = ParameterDirection.Output;
p7.Direction = ParameterDirection.Output;

p1.Value = "1234"; p2.Value = 1;
OracleConnection conn = new OracleConnection(@"Data Source=XXX;Password=XXX;User ID=XXX");
conn.Open();
OracleCommand testCommand = conn.CreateCommand();
testCommand.CommandText = "abc.bcd";
testCommand.CommandType = CommandType.StoredProcedure;

testCommand.Parameters.Add(p1);
testCommand.Parameters.Add(p2);
testCommand.Parameters.Add(p3);
testCommand.Parameters.Add(p4);
testCommand.Parameters.Add(p5);
testCommand.Parameters.Add(p6);
testCommand.Parameters.Add(p7);
OracleDataAdapter daHIS = new OracleDataAdapter();
daHIS.SelectCommand = testCommand;
DataSet ds = new DataSet();
daHIS.Fill(ds);
conn.Close();

create or replace procedure abc.bcd(t1 in varchar2,t2 in number,t3 out varchar2 ,t4 out number,t5 out number , t6out number ,t7 out number )

declare
t3 varchar2(20);
t4 number;
t5 number;
t6 number;
t7 number;

begin
inpbill.fetch_inp_fee('123', 1, t3, t4, t4, t5, t7);
end;

这个在数据库中可以执行
展开
 我来答
百度网友94f02eb
2012-12-30 · TA获得超过8612个赞
知道大有可为答主
回答量:7955
采纳率:74%
帮助的人:4415万
展开全部
create or replace procedure abc.bcd(t1 in varchar2,t2 in number,t3 out varchar2 ,t4 out number,t5 out number , t6out number ,t7 out number )
/* 这部分要注释掉,你的参数是传入的,这里不能重复申明
declare
t3 varchar2(20);
t4 number;
t5 number;
t6 number;
t7 number;
*/

begin
inpbill.fetch_inp_fee('123', 1, t3, t4, t4, t5, t7);
end;
更多追问追答
追问
abc.bcd(t1 in varchar2,t2 in number,t3 out varchar2 ,t4 out number,t5  out number , t6out number ,t7 out number )
这个是存储过程的结构

declare
t3 varchar2(20); t4 number; t5 number; t6 number;t7 number;
begin
inpbill.fetch_inp_fee('123', 1, t3, t4, t4, t5, t7);
insert into AA values(t3);
  end;
  这个在数据库中运行是没有问题的 查询AA这个表里面也有数据
追答
你现在是要返回参数值吗?
你的 t3, t4, t7 是做什么的?
whm412
2012-12-30 · TA获得超过515个赞
知道小有建树答主
回答量:289
采纳率:66%
帮助的人:278万
展开全部
将存储过程
create or replace procedure abc.bcd(t1 in varchar2,t2 in number,t3 inout varchar2 ,t4 inout number,t5 inout number , t6 inout number ,t7 inout number )

t3、t4、t5、t6、t7都定义成inout类型。
在存储过程当中定义out类型,是传不去值的,而你还想要向其中传值,只能定义成inout型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式