有人可以说明这个函数调用有什么问题。返回变量没有名称,不确定是否存在任何问题。这在pl sql中正常工作。
oracle function code:
FUNCTION GETSTATUS (
p_param1 in varchar2,
p_param2 in number,
p_param3 out varchar2)
return boolean
is
return true;
END GETSTATUS;
ODP.Net版本 - 32位Oraclient10201_win32
C#代码
var cmd = new OracleCommand("tk_ccc.GETSTATUS ", connweb);
cmd.CommandType = CommandType.StoredProcedure;
cmd.BindByName = true;
cmd.Parameters.Add("Return_Value", OracleDbType.Char, 1, ParameterDirection.Output);
var prm1 = new OracleParameter("p_param1", OracleDbType.Varchar2, 20, ParameterDirection.Input) { Value = "1649983" };
cmd.Parameters.Add(prm1);
var prm2 = new OracleParameter("p_param2", OracleDbType.Int32, ParameterDirection.Input) { Value = 1 };
cmd.Parameters.Add(prm1);
var prm3 = new OracleParameter("p_param3", OracleDbType.Varchar2, 100, ParameterDirection.Output);
cmd.Parameters.Add(prm1);
var ret = cmd.ExecuteNonQuery();
错误讯息:
ORA-06550:第1行第7列:\ nPLS-00306:调用'GETSTATUS'\ nORA-06550:第1行第7列的参数数目错误:
PL / SQL:忽略语句
答案 0 :(得分:2)
SYS.diutil.bool_to_int过程可用于将bool返回值转换为整数并使用CommandType.Text,这解决了我的问题。
var cmd = new OracleCommand
{
Connection = connweb,
CommandText = "begin " +
":ret_val:= SYS.diutil.bool_to_int(tk_ccc.GETSTATUS(:p_param1,:p_param2,:p_param3)); " +
" end; ",
CommandType = CommandType.Text
};
var returnVal = new OracleParameter("ret_val", OracleDbType.Int32,1);
returnval.Direction=ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnVal);
var p_param1 = new OracleParameter("p_param1", OracleDbType.Varchar2, 20);
p_param1.Direction=ParameterDirection.Input;
p_param1.Value = "1649983" ;
cmd.Parameters.Add(p_param1);
var p_param2 = new OracleParameter("p_param2", OracleDbType.Varchar2, 20);
p_param2.Direction=ParameterDirection.Input;
p_param2.Value = "1" ;
cmd.Parameters.Add(p_param2);
var p_param3 = new OracleParameter("p_param3", OracleDbType.Varchar2, 200);
p_param3.Direction=ParameterDirection.Output;
cmd.Parameters.Add(p_param3);
var ret = cmd.ExecuteNonQuery();
答案 1 :(得分:0)
我认为您的返回值参数是问题所在。它应该使用ParameterDirection.ReturnValue
,如下所示:
cmd.Parameters.Add("Return_Value", OracleDbType.Char, 1, ParameterDirection.ReturnValue);
答案 2 :(得分:0)
ODP.NET提供程序不支持-Dspark.master=local[*]
数据类型。您必须返回不同的数据类型,例如INTEGER(BOOLEAN
)使用0和1。