ORA-06502: PL/SQL:从c# web服务调用存储过程的数字或值错误



我正在尝试编写一个调用oracle存储过程的web服务。这个过程有两个输入——一个字符串(company_code)和一个int(客户代码)。它有2个输出参数;一个数字(pout_addr_code)和一个varchar2 (pout_descr)。当我从SQL Developer中运行这个过程时,一切正常,两个值都按预期返回。当我从我的c# web服务调用过程时,我得到错误"Oracle.DataAccess.Client"。OracleException: ORA-06502: PL/SQL: numeric or value error"在执行时,而不是在编译时。

如果我注释掉cmd.ExecuteNonQuery()返回pout_addr_code.Value…行,它将运行良好并输出我的测试字符串。

如果我从过程中删除varchar2输出并注释掉添加pout_descr参数的部分并注释掉返回"I returned…"它运行良好,包括从存储过程返回值。

所以在我看来,问题是在执行NonQuery当过程具有OracleDbType。Varchar2 。在c#中使用Oracle添加输出参数时,是否有其他方式来定义这个?DataAccess参考吗?我发现这篇文章询问了一个类似的错误,但他的解决方案是'在c#中指定VARCHAR2的最大值为32767 '但我不知道你是如何做到的。

下面是我的c#代码:
public string AutoPmtPost(string company_code, int customer_code)
    {
        string oradb = "Data Source=MySource; User Id=MyID; Password=MyPassword;";
        OracleConnection conn = new OracleConnection(oradb);
        conn.Open();
        OracleCommand cmd = new OracleCommand("USP_JEFF_TEST", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("pin_company_code", OracleDbType.Varchar2, ParameterDirection.Input).Value = company_code;
        cmd.Parameters.Add("pin_customer_code", OracleDbType.Int32, ParameterDirection.Input).Value = customer_code;
        OracleParameter pout_addr_code = new OracleParameter("pout_addr_code", OracleDbType.Int32);
        pout_addr_code.Direction = ParameterDirection.Output;
        cmd.Parameters.Add(pout_addr_code);
        OracleParameter pout_descr = new OracleParameter("pout_descr", OracleDbType.Varchar2);
        pout_descr.Direction = ParameterDirection.Output;
        cmd.Parameters.Add(pout_descr);
        cmd.ExecuteNonQuery();
        //return pout_addr_code.Value.ToString();
        return "I returned something";
    }

谢谢。

OracleParameter pout_descr = new OracleParameter("pout_descr", OracleDbType.Varchar2);

应为

OracleParameter pout_descr = new OracleParameter("pout_descr", OracleDbType.Varchar2, 2000);

相关内容

  • 没有找到相关文章

最新更新