从c#调用oracle函数给出错误
Posted
技术标签:
【中文标题】从c#调用oracle函数给出错误【英文标题】:calling oracle function from c# giving error 【发布时间】:2016-10-25 11:41:42 【问题描述】:从 C# 执行 oracle 函数时,我们收到此错误。 请帮忙解决。
ORA-06550:第 1 行,第 15 列:
PLS-00306:调用中的参数数量或类型错误 'LIST_WITHOUT_DUBLICATES'
ORA-06550:第 1 行,第 7 列:
PL/SQL:语句被忽略
我的 C# 代码
comm.Connection = conn;
comm.CommandText = "LIVE.list_without_dublicates";
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add("p_str", to_list);
comm.Parameters.Add("p_sep", ",");
comm.Parameters.Add("result", OracleDbType.Varchar2);
comm.Parameters["result"].Direction = ParameterDirection.ReturnValue;
comm.ExecuteNonQuery();
函数签名
LIVE.list_without_dublicates(
p_str IN VARCHAR2,
p_sep IN VARCHAR2 DEFAULT ',')
RETURN VARCHAR2
【问题讨论】:
函数名真的是list_without_dublicates
而不是list_without_duplicates
吗?
@GordonLinoff 仅限 list_without_dublicates
你也可以发布你的函数体吗?
你的 c# 中的 'to_list' 是什么?
你正在添加参数结果comm.Parameters.Add("result", OracleDbType.Varchar2)
;这不是函数的参数。
【参考方案1】:
据我所知,当它是返回值时,您必须指定 Varchar2
的(最大)长度。
试试这个:
comm.Parameters.Add("result", OracleDbType.Varchar2, 4000, null, ParameterDirection.ReturnValue);
而不是
comm.Parameters.Add("result", OracleDbType.Varchar2);
comm.Parameters["result"].Direction = ParameterDirection.ReturnValue;
也试试
comm.CommandText = "BEGIN :result := LIVE.list_without_dublicates(:p_str, :p_sep); END;";
comm.CommandType = CommandType.Text;
而不是
comm.CommandText = "LIVE.list_without_dublicates";
comm.CommandType = CommandType.StoredProcedure;
【讨论】:
@Wernfriend 谢谢你的回答..它也给了我同样的错误..所以我用 select functionname from dual 调用了这个函数,它起作用了..im upvoting ur answer以上是关于从c#调用oracle函数给出错误的主要内容,如果未能解决你的问题,请参考以下文章