c# - ORA-06550 : line 1, 第 7 列:PLS-00306:参数的数量或类型错误

标签 c# oracle odp.net

我在 Oracle 11g 服务器上调用存储过程时遇到问题。

存储过程

PROCEDURE get_rit_by_user_id(KDC_KEY      IN VARCHAR2,
                             p_id_utente IN NUMBER,
                             p_cur_out   OUT type_cursor) IS
  BEGIN
    ...
    ...
    ...
  END

c#代码

OracleCommand cmd = new OracleCommand();
cmd.Connection = oracleConnection;
cmd.CommandText = userIdEsercizio + packageName + "GET_RIT_BY_USER_ID";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("KDC_KEY", OracleDbType.Varchar2, kdcKey, ParameterDirection.Input);
cmd.Parameters.Add("P_ID_UTENTE", OracleDbType.Int32, user_id, ParameterDirection.Input);
cmd.Parameters.Add("P_CUR_OUT", OracleDbType.RefCursor, ParameterDirection.Output);

OracleDataReader reader = cmd.ExecuteReader();

cmd.ExecuteReader() 抛出这个异常:

ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'GET_RIT_BY_USER_ID' ORA-06550: line 1, column 7: PL/SQL: Statement ignored

上面的代码有什么问题,它得到了一个错误的参数类型数量错误?

最佳答案

您的第二个参数是 NUMBER,而不是整数。将第二个参数类型改为OracleDbType.Decimal

http://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleDbTypeEnumerationType.htm

还要检查 Add 方法的语法。现在更明确地指定参数属性可能更好,即使它会使代码更冗长:

cmd.Parameters.Add(
    new OracleParameter() 
        {
            ParameterName="KDC_KEY", 
            DbType=OracleDbType.Varchar2, 
            Value=kdcKey, 
            Direction=ParameterDirection.Input
        } 
    );

等等

除了游标之外,proc 是否返回结果集?如果不使用 ExecuteNonQuery 而不是 Execute

关于c# - ORA-06550 : line 1, 第 7 列:PLS-00306:参数的数量或类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11505204/

相关文章:

java - GWT - Oracle JDBC 连接问题

sql - 选择其他列值以及 min(salary),其中可能存在重复的工资

.net - 部署使用 Oracle.DataAccess 的 Web 服务器会导致各种程序集错误

c# - ODP .NET 获取 SYSREFCURSOR 输出。 {"Unsupported column datatype"} 错误

c# - 使 Visual Studios "Add Service Reference"功能使用现有类

c# - 当请求离开 asp :multiview or ajax 时,在 Response.End() 之后没有写入响应

c# - 无法打开下载保存对话框

c# - 如何获取套接字异常值

c# - 来自普通 SQL 的 Oracle sys_refcursor

c# - Oracle 说 FROM 缺失、拼写错误或放错位置