ORA-06550:第1行,第37列:PLS-00201:标识符';XYZ';必须声明

本文关键字:XYZ 声明 标识符 1行 37列 PLS-00201 ORA-06550 | 更新日期: 2023-09-27 17:58:05

当我试图通过以下C#代码访问和执行存储过程时这是我的C#代码

   OracleParameter op = null;
   OracleDataReader dr = null;
   OracleCommand cmd = new OracleCommand();
   cmd.CommandText = "pkg_prov_index.getNextPanel";
   cmd.CommandType = CommandType.StoredProcedure;

  op = new OracleParameter("pCurrentPanelId", OracleDbType.Int32);
  op.Direction = ParameterDirection.Input;
  op.Value = masterProviderIndex.CurrentPanelId;
  cmd.Parameters.Add(op);
  op = new OracleParameter("pRefCursor", OracleDbType.RefCursor);
  op.Direction = ParameterDirection.inputOutput;
  cmd.Parameters.Add(op);
  dr =cmd.ExecuteReader(); Here , it gives me an error that says ORA-06550: line 1,   column 37: PLS-00201: identifier 'XYZ' must be declared at 
  if(dr.HasRows)
  {while(dr.Read())
     {
     }
  }

我确实有访问和执行存储过程的权限,所以没有问题。当我在Sql Developer中打开并看到存储过程时,它有一个输入和输出游标(输入游标用于读取如此多的列,因为SP只是一个select语句和View上的where子句,该语句涉及5个表,然后输出游标用于写入该SP的输出结果)。这就是我对游标的理解。。因为我是个上网的人,而不是神谕专家。现在回到最重要的一点。如果你们查看我的代码中的输入/输出游标,我得到的只是oracledbtype。在C#枚举中的oracledbtype的.refcursor,但oracle SP使用的是输入/输出光标,这是我错误的根源吗,因为我将输入/输出参数作为refcursor发送,而oracle SP有输入/输出指针而不是refcursor,但在使用C#编写代码时,refcursor是我得到的全部。我们将非常感谢你的帮助。谢谢

ORA-06550:第1行,第37列:PLS-00201:标识符';XYZ';必须声明

CommandText之前,您应该尝试为过程命名,如下所示:

OracleCommand cmd = new OracleCommand("getNextPanel", _conn);

当您通过CommandType.StoredProcedure 调用参数OracleParameter时,它必须与参数名称(而不仅仅是类型)完全匹配

为什么cmd.Parameters.Add(op);要运行两次?此外,op.Direction = ParameterDirection.inputOutput;"i"字母必须大写(可能是打字错误)。

给出的步骤是由我开发的一个工作示例执行的,遵循以下步骤:从C#调用Oracle存储过程?