我从oracle包调用一个函数,它将返回一个字符串,如下所示
using(OracleConnection con = AppConn.Connection)
{
OracleCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.CommandText = "select P_Pkg.found(@p_id) from dual";
OracleParameter p_id = new OracleParameter();
p_id.OracleDbType = OracleDbType.Int64;
p_id.Direction = ParameterDirection.Input;
p_id.Value = requestHeader.approval_id;
cmd.Parameters.Add(p_id);
try
{
con.Open();
string found = cmd.ExecuteScalar().ToString();
}
catch(Exception ex)
{
}
finally
{
con.Close();
}
}
但我收到以下错误。经过大量搜索,我无法找到问题所在。请帮忙。
ORA-06550:第1行,第51栏:
PL / SQL:ORA-00936:缺少表达式
ORA-06550:第1行,第7栏:
oracle中的函数签名
P_Pkg.found(p_id IN NUMBER)
RETURN varchar2 //(YES , NO)
我从oracle运行这个如下所示,得到的结果没有任何错误
select P_Pkg.found(1053) from dual
答案 0 :(得分:3)
问题在于使用SQL Server特定的参数/绑定变量前缀。 Oracle使用:
代替@
。 SQL解析器现在无法理解您的查询。
请改用此代码:
select P_Pkg.found(:p_id) from dual
答案 1 :(得分:3)
要调用存储过程,只需将命令文本设置为存储过程名称,然后使用正确的名称添加参数
using (OracleConnection con = new OracleConnection(AppConn.Connection))
{
using (OracleCommand cmd = con.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.CommandText = "P_Pkg.found";
OracleParameter p_id = new OracleParameter();
p_id.ParameterName = "p_id";
p_id.OracleDbType = OracleDbType.Int64;
p_id.Direction = ParameterDirection.Input;
p_id.Value = requestHeader.approval_id;
OracleParameter retVal = new OracleParameter();
retVal.ParameterName = "ReturnValue";
retVal.OracleDbType = OracleDbType.Varchar2; // Whatever the type the SP returns
retVal.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(p_id);
cmd.Parameters.Add(retVal);
try
{
con.Open();
cmd.ExecuteNonQuery();
string found = cmd.Parameters["ReturnValue"].Value.ToString();
}
catch (Exception ex)
{
}
finally
{
con.Close();
}
}
}