【问题标题】:Call Oracle Stored Procedure with Char Out Parameter errors with PLS-00306: wrong number or types of arguments in callCall Oracle Stored Procedure with Char Out Parameter errors with PLS-00306: wrong number or types of arguments in call
【发布时间】:2013-12-29 16:05:21
【问题描述】:

我有以下 Oracle 存储过程:

PROCEDURE SP_ITEMEXISTS(pID IN NUMBER, pExists OUT CHAR) IS
BEGIN
        select CASE count(*) WHEN 0 THEN 'N' ELSE 'Y' END into pExists from items where id = pID;
END SP_ITEMEXISTS;

我使用 ODP.NET 从 Enterprise Library 6.0 调用它,代码如下:

    public bool ItemExists(int itemID)
    {
        string procedureName = "SP_ItemExists";
        var database = new DatabaseProviderFactory().CreateDefault();
        bool returnValue = false;

        using (OracleCommand command = (OracleCommand)database.GetStoredProcCommand(procedureName))
        {
            command.Parameters.Add("pID", OracleDbType.Int32, itemID, ParameterDirection.Input);
            command.Parameters.Add("pExists", OracleDbType.Char, ParameterDirection.Output);

            using (OracleDataReader reader = ((OracleDataReaderWrapper)database.ExecuteReader(command)).InnerReader)
            {
                char exists = reader.GetChar("pExists");

                if (exists.ToString().ToUpper() == "Y")
                    returnValue = true;
                else
                    returnValue = false;
            }
        }

        return returnValue;

    }

我收到以下错误: ORA-06550:第 1 行,第 7 列:\nPLS-00306:调用“SP_ITEMEXISTS”时参数的数量或类型错误\nORA-06550:第 1 行,第 7 列:\nPL/SQL:语句被忽略强>

我还有其他可以成功调用的存储过程,但是其他的有一个 refcursor OUT 参数。 OUT类型为Char时如何调用?

【问题讨论】:

  • 运行cmd.ExecuteNonQuery(); char exists = command.Parameters[2].Value;时是否有效?

标签: c# oracle enterprise-library odp.net enterprise-library-6


【解决方案1】:

ExecuteReader 仅用于您已经发现的 RefCursor。使用database.ExecuteNonQuery() 调用过程或函数。 用command.Parameters("pExists").Value读出返回值

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多