C# 函数不是过程或未定义
下面的函数返回C# 函数不是过程或未定义,c#,oracle,C#,Oracle,下面的函数返回VARCHAR2datatype,并且工作正常: select Get_Desc("45") from dual; 但是当我试图使用C运行时,我在cmd.ExecuteNonQuery()上收到了错误消息: ORA-06550:第1行第7列:PLS-00221:“F_GET_DESC”不是过程或未定义ORA-06550:第1行第7列:PL/SQL:语句被忽略 功能代码 CREATE OR REPLACE FUNCTION Schema.F_Get_Desc(P_CODE VARC
VARCHAR2
datatype,并且工作正常:
select Get_Desc("45") from dual;
但是当我试图使用C运行时,我在cmd.ExecuteNonQuery()
上收到了错误消息:
ORA-06550:第1行第7列:PLS-00221:“F_GET_DESC”不是过程或未定义ORA-06550:第1行第7列:PL/SQL:语句被忽略
功能代码
CREATE OR REPLACE FUNCTION Schema.F_Get_Desc(P_CODE VARCHAR2)
RETURN VARCHAR2
IS
v_DESC VARCHAR2(64);
BEGIN
IF P_CODE IS NULL THEN
RETURN('');
END IF;
SELECT NAME_dsec
INTO V_DESC
FROM My_table
WHERE CODE = P_CODE;
RETURN(V_DESC);
END;
/
您是否尝试在命令字符串中指定架构名称?像这样的
string CommandStr = "Schema.F_Get_Desc()";
还要确保您登录的用户有权访问该功能,并具有正确的执行权限。如果此函数没有公共同义词,则可能必须在命令字符串中指定架构名称。通过这种方式解决了此问题
public void Get_Desc()
{
string oradb = "Data Source=schema;User Id=user;Password=pwd;";
string CommandStr = "F_Get_Office_Desc";
using (OracleConnection conn = new OracleConnection(oradb))
using (OracleCommand cmd = new OracleCommand(CommandStr, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("iCode", OracleDbType.Varchar2).Value = Current_code;
cmd.Parameters.Add("oDesc", OracleDbType.Varchar2, 4).Direction = ParameterDirection.ReturnValue;
conn.Open();
cmd.ExecuteNonQuery();
Current_Desc.Text = cmd.Parameters["oDesc"].Value.ToString();
}
}
您是否尝试过使用
Get_Desc()
而不是F_Get_Desc()
?请编辑您的问题并包含您正在调用的函数的代码。此外,请显示过程在其中定义的架构的名称。谢谢。@MT0是的,我做了@Bob这是有趣的代码。您还需要添加一个参数作为输出,以接收函数的返回值。您可以看到,我正在添加参数ORA-06550第1行第7PLS-00801列内部错误[22503]ORA-06550第1行,列7PL/SQL语句被忽略,我在同一个模式上有两个函数,我用相同的方式调用它们。唯一的区别是,这个函数有参数,因为您可以看到第一个正在工作,但它不会使用string CommandStr=“F_Get_Desc(pDesc)”运行代码>您声明了OracleParameter,但C#不知道将其放置在何处。
public void Get_Desc()
{
string oradb = "Data Source=schema;User Id=user;Password=pwd;";
string CommandStr = "F_Get_Office_Desc";
using (OracleConnection conn = new OracleConnection(oradb))
using (OracleCommand cmd = new OracleCommand(CommandStr, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("iCode", OracleDbType.Varchar2).Value = Current_code;
cmd.Parameters.Add("oDesc", OracleDbType.Varchar2, 4).Direction = ParameterDirection.ReturnValue;
conn.Open();
cmd.ExecuteNonQuery();
Current_Desc.Text = cmd.Parameters["oDesc"].Value.ToString();
}
}