使用PLS-00306调用带有Char Out参数错误的Oracle存储过程:调用中的参数数量或类型错误

时间:2013-12-11 15:34:55

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

我有以下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?

时,如何调用它?

1 个答案:

答案 0 :(得分:0)

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

读取返回值