【发布时间】:2016-03-09 19:27:40
【问题描述】:
谁能建议这个函数调用有什么问题。返回变量没有名称,不确定是否有任何问题。这在 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:语句被忽略
【问题讨论】:
-
作为最佳实践,函数应该返回一个且只有一个值,而不是输出参数和值。 Oracle 仅在 PL/SQL 中具有布尔值。如果您的函数返回一个数字,它可能会起作用。
-
谢谢。但这是一个共享程序,我不能只为我编辑。
-
为什么要添加一个名为
"Return_Value"的char参数? -
有返回值,没有名字。但我只是分配了一个名字。你对此有什么建议吗?
-
您执行 cmd.Parameters.Add(prm1); 三次。 .Add(prm2) 和 prm3 呢?特别是因为 prm2 是不同的数据类型...