【问题标题】:ORA-06550 store procedure errorORA-06550 存储过程错误
【发布时间】:2018-06-12 00:19:28
【问题描述】:

我有一个这样的存储过程

PROCEDURE PRC_ABCD_GETALL (resultset_out OUT TYPES.cursorType)
AS
BEGIN
OPEN 
resultset_out FOR SELECT * FROM ABCD;
END PRC_ABCD_GETALL;

而且这个程序在包里,包是这样的

create or replace
PACKAGE        V4_EVT_PKG_ABCD_GENERAL
AS
PROCEDURE PRC_ABCD_GETALL (resultset_out OUT TYPES.cursorType);
END V4_EVT_PKG_ABCD_GENERAL;

oracle 数据提供者是 system.data.oracleClient,之前的代码是这样的

public static IEnumerable<PortalList> GetAll()
{
  Database db = DatabaseFactory.CreateDatabase();
  DbCommand objComm = db.GetStoredProcCommand("package_name.sp", new 
  object[1]);          
  var result = new List<PortalList>();         
  using (IDataReader rdr = db.ExecuteReader(objComm))
  {            
    while (rdr.Read())
    {                   
      result.Add(Construct(rdr));               
    }           
  }         
return result;

}

现在我发现 system.data.oracleClient 已被贬低,我想使用 Oracle.DataAccess.Client 作为数据提供者我为此编写了 C# 代码,但我遇到了一些错误,例如调用中的参数数量或类型错误到这个函数中的'PRC_ABCD_GETALL' PortalListRepository.GetAll();

private static IEnumerable<PortalList> GetAll(bool forceDataReload)
{
    const string cacheKey = "PortalListService_GetAll";
    IEnumerable<PortalList> result = null;
    if (!forceDataReload)
        result = GetFromCache(cacheKey);
    if (result == null)
    {
        result = PortalListRepository.GetAll();
        AddToCache(cacheKey, result);
    }

    return result;
 }

我无法解决。

C#代码

public static IEnumerable<PortalList> GetAll()
{
  string cnn = "connectionstring";
  var result = new List<PortalList>();
  using (OracleConnection conn = new OracleConnection(cnn))
  {
        conn.Open();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandText = "PRC_ABCD_GETALL";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("resultset_out", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
        OracleDataReader rdr = cmd.ExecuteReader();              
        while (rdr.Read())
        {
            result.Add(Construct(rdr));
        }
    }
    return result;
}

我对此非常陌生,我不知道如何解决它。任何人都知道我在 C# 代码、我的存储过程或我的包中做错了什么?请帮助我一直在尝试这个差不多 3 周,但没有运气:(((

【问题讨论】:

  • 您的代码和错误不匹配。这是真正的代码吗?
  • 是的,我写了这段代码。问题是如果我关闭这个 cmd.Parameters.Add("resultset_out", OracleType.Cursor, ParameterDirection.Output);然后我得到“ORA-06550:第 1 行,第 7 列:\nPLS-00306:调用 'PRC_ABCD_GETALL'\nORA-06550:第 1 行,第 7 列:\nPL/SQL:语句被忽略” .你能帮我解决这个问题吗?我搜索了所有东西,但没有运气:( .
  • 你能从sql developer正确执行你的存储过程吗?您使用光标有什么原因吗?
  • 您好,感谢您的回复:)。这都是由以前的开发人员完成的。我项目中的每个存储过程都有相同的 resultset_out OUT TYPES.cursorType。我正在尝试纠正它,但我对 TYPES.cursortype 感到困惑。我从来没有使用过这个。你能告诉我在包、存储过程或 C# 代码中要纠正什么吗?我会将我的过程执行的屏幕截图附加到 sql 开发人员中以获取更多详细信息。你的回复对我来说真的很有价值。我是试图解决这个问题超过 3 周,但根本没有运气:(

标签: c# asp.net-mvc oracle11g


【解决方案1】:

最后我解决了这个错误,我的头在墙上撞了几个星期后,天啊。为什么我遇到这个错误是我在我的 64 位操作系统中安装了 32 位 oracle 12c,这就是它无法加载 oracle 程序集的原因.data.accesss dll,它会抛出这些异常。

解决办法: 转到您的项目->属性->内置->任何 cpu 或 64 位我做了任何 cpu 它解决了我的问题。

欲了解更多详情,请访问此链接:

https://rambletech.wordpress.com/2011/09/26/could-not-load-file-or-assembly-oracle-dataaccess-error/

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 2012-08-25
    • 2010-11-22
    • 2015-08-24
    • 1970-01-01
    • 2011-12-26
    • 2015-06-11
    相关资源
    最近更新 更多