You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据绑定时调用GET_MANUAL_LOS_REQ_STATUS参数错误求助

ORA-06550 存储过程调用参数错误:原因排查与修复方案

错误原因

存储过程GET_MANUAL_LOS_REQ_STATUS中,P_OUTSTATUS和P_MESSAGE定义为VARCHAR2类型的输出参数,但C#调用代码里错误地将这两个参数的OracleDbType设置为OracleDbType.RefCursor,参数类型完全不匹配,导致Oracle抛出参数数量/类型不匹配的错误。

修复方案

修改C#代码中P_OUTSTATUS和P_MESSAGE的参数类型为OracleDbType.Varchar2,匹配存储过程的定义:

public DataTable Bind_Grid_Data()
{
    OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionStringAirFiber"].ConnectionString);
    try
    {
        OracleCommand cmd = new OracleCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = ConfigurationManager.AppSettings["GET_MANUAL_LOS_REQ_STATUS"];
        cmd.Connection = conn;

        // 游标参数,类型设置正确
        cmd.Parameters.Add(new OracleParameter
        {
            ParameterName = "P_CURR",
            OracleDbType = OracleDbType.RefCursor,
            Direction = ParameterDirection.Output
        });

        // 修正为Varchar2类型,匹配存储过程定义
        cmd.Parameters.Add(new OracleParameter
        {
            ParameterName = "P_OUTSTATUS",
            OracleDbType = OracleDbType.Varchar2,
            Size = 500,
            Direction = ParameterDirection.Output
        });

        // 修正为Varchar2类型,匹配存储过程定义
        cmd.Parameters.Add(new OracleParameter
        {
            ParameterName = "P_MESSAGE",
            OracleDbType = OracleDbType.Varchar2,
            Size = 500,
            Direction = ParameterDirection.Output
        });

        if (conn.State != ConnectionState.Open) conn.Open();

        OracleDataAdapter daIPColo = new OracleDataAdapter(cmd);
        DataTable dtIPColo = new DataTable();
        daIPColo.Fill(dtIPColo);
        
        // 可选:读取存储过程返回的状态信息
        string outStatus = cmd.Parameters["P_OUTSTATUS"].Value.ToString();
        string message = cmd.Parameters["P_MESSAGE"].Value.ToString();

        return dtIPColo;
    }
    catch (Exception ex)
    {
        throw;
    }
    finally
    {
        if (conn.State == ConnectionState.Open) conn.Close();
    }
}

额外说明

  • 游标参数P_CURR的类型设置正确,无需修改;
  • 执行Fill方法后,可以读取P_OUTSTATUS和P_MESSAGE的参数值,获取存储过程的执行状态;
  • 确保配置文件中存储过程名称与数据库中定义的完全一致。

内容的提问来源于stack exchange,提问作者Nadeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:13:33