从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函数给出错误的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 调用 oracle 函数

Oracle 函数调用的返回值返回 null

从 Java 调用 Oracle 函数时出现错误 ORA-00900

C# Oracle 函数调用

调用返回游标的 oracle 函数

oracle测试函数,包含带有sql developer的游标