求解C#调用ORACLE存储过程的问题,出现错误 ora-06550好像是参数类型和参数个数的问题,我都试N次了。

已知ORACLE过程如下
create or replace procedure WCL_1
(
tiaojian IN VARCHAR2,
P_YXS_BJH IN CHAR, --第几包件
P_YXS_BJ IN Integer, --总包件
P_YXS_XSPC IN VARCHAR2,
P_YXS_SHDH IN VARCHAR2, -- pbjh,pbj,pxspc,pshdh 为预销售处理的参数
P_DJCL_KHBH IN VARCHAR2,
p_DJCL_SPBS IN CHAR,
p_DJCL_SL IN NUMBER,
p_DJCL_CJBZ IN CHAR, -- pspbs,pkhbh,psl,pcjbz 为低价书处理业务参数
P_MLQH IN VARCHAR2,
P_MLQH_XSZK IN VARCHAR2,
P_MLQH_QSSJ IN DATE,
P_MLQH_ZZSJ IN DATE,
result OUT NUMBER, -- '2' 成功,'1'失败
p_nErrCode OUT NUMBER,
p_vErrText OUT VARCHAR2
)

IF tiaojian='mlqhzk' THEN --根据目录期号设置折扣
begin
insert into wcl_12(spbs,xszk,tm)
select b.spbs,P_MLQH_XSZK,P_MLQH from jcdcg_dmlb a,bm_jbxxk b where a.dpzbm_fk=b.dpzbm and a.zdmlqh_pk=P_MLQH;

insert into jcdms_zkb_new(bmbh,yxxl,bbbh,bbmc,spbs,sm,qsrq,zzrq,zkl,szr,szsj,syxz,id)
select '02',b.ywxl,b.bb,b.bb||'|'||c.cbsjc,a.spbs,b.sm,sysdate-10,sysdate-10,a.xszk xszk,'proc',sysdate,'1',WCL_XH.Nextval
from wcl_12 a,bm_jbxxk b,bm_cbsbmb c
where a.spbs=b.spbs
and b.bb=c.bb
and trim(a.tm)=P_MLQH;
end;
END IF;

Commit;
result := 2;
p_nErrCode := 0;
p_vErrText := '成功';
return;

EXCEPTION
--失败数据回滚,显示错误代码!
WHEN OTHERS THEN
Rollback;
result := 1;
p_nErrCode := SQLCODE;
p_vErrText := SQLERRM;
return;

END WCL_1;

我在C# winform中用了以下代码,但是执行过程不成功,后来调试时提示是ORA-06550错误,好像是参数类型与过程中参数不符,现贴上C#中的源码,望各位高手指点一下
private void button1_Click(object sender, EventArgs e)
{
OracleConnection conn = new OracleConnection(Dboperation.connectionstring);
conn.Open();
OracleCommand cmd = new OracleCommand("WCL_1", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;

OracleParameter ptiaojian=new OracleParameter("tiaojian",OracleType.Char);
OracleParameter p1=new OracleParameter("P_MLQH",OracleType.Char);
OracleParameter p2=new OracleParameter("P_MLQH_XSZK",OracleType.Char);
ptiaojian.Value = "mlqhzk";
p1.Value = "16901096";
p2.Value = "90";
ptiaojian.Direction = ParameterDirection.Input;
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.Input;

OracleParameter resul = new OracleParameter("result",OracleType.Float,4);
OracleParameter errtext = new OracleParameter("p_vErrText", OracleType.VarChar,60);
resul.Direction = ParameterDirection.Output;
errtext.Direction = ParameterDirection.Output;

cmd.Parameters.Add(ptiaojian);
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);

cmd.Parameters.Add(resul);
cmd.Parameters.Add(errtext);
try
{
cmd.ExecuteNonQuery();
}
catch (OracleException ex)
{
string errorMessage = "Code: " + ex.Code + "\n" +
"Message: " + ex.Message;

//
}
conn.Close();
label5.Text = Convert.ToString(resul.Value);
label6.Text = Convert.ToString(errtext.Value);
}

第1个回答  2011-05-25
原来是在.net中,ms为oracle提供的oledb接口有问题,换成oracle自己的就没有问题了
?? 找来的答案追问

什么意思?楼上的,我听不懂,具体怎么操作。

求解C#调用ORACLE存储过程的问题,出现错误 ora-06550好像是参数类型和参...
原来是在.net中,ms为oracle提供的oledb接口有问题,换成oracle自己的就没有问题了 ?? 找来的答案

oracle包调用出错ora-06550:第1行,第7列
出现ORA-06550错误的原因可能有很多,包括但不限于以下几点:1. 存储过程或函数中的代码逻辑错误,如语法错误、数据类型不匹配等。2. 在调用存储过程或函数时传递的参数不正确或缺失。3. 数据库连接问题,如权限不足或连接中断等。三、解决方案 针对ORA-06550错误,可以采取以下步骤进行排查和解决:1. ...

Oracle中执行存储过程报:ORA-06550错误
把第二行的exec去掉,直接写st_mts_GOOOrderDescr141203 上这个过程和参数,exec是sqlplus的命令,而不是oracle pl\/sql language的命令

ORA-06550: 第 1 行, 第 7 列: PLS-00306: 调用 'UPDAT...
你没有给你的cmd对象设置类型,比如 先cmd.CommandText=storedProcName;\/\/声明存储过程名 后还要cmd.CommandType=CommandType.StoredProcedure;然后再执行

用C#开发WEB SERVICE,测试时出现ORA-06550错误
ORA-06550是oracle报的错。你的plsql语句有问题,你可以选择将它贴出来大家一起解决,也可以自行解决。 看看自己的webservice d、s、i分别是什么值,把存储过程贴下

ORA-06550: 第 1 行, 第 7 列: PLS-00306: 调用 'UPDATECQCINFO_F...
不知你存储过程中的参数个数是几个,看是否对应,关键的是参数类型,尤其是DateTime类型,Oracle的时间类型比较怪,通常要转换

oracle ora-06550 错误 提示必须声明标识符‘scott’
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

ORACLE存储过程中游标作为输出参数调用时怎么报错
1.通过存储过程的出参,将“当前用户:user_id”连接串返回;比如:假设你的过程叫,prc_test,在参数列表中增加出参。create or replace procedure prc_test(入参 in 类型, 出参 out 类型) is begin -- 逻辑实现 end;出参就是你要把内容放进去,用来传值的变量。2.在过程中保存一张临时表,...

关于oracle8i的带参数游标用法的问题
定义参数的语法如下:parameter_name [in] data_type[{:=|default} value] 与存储过程不同的是,游标只能接受传递的值,而不能返回值。参数只定义数据类型,没有大小。 另外可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。 在...

Oracle中执行存储过程报:ORA-06550错误
把第二行的exec去掉,直接写st_mts_GOOOrderDescr141203 上这个过程和参数,exec是sqlplus的命令,而不是oracle pl\/sql language的命令

相似回答