Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 函数不是过程或未定义_C#_Oracle - Fatal编程技术网

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();
        }
    }