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是我得到的全部。我们将非常感谢你的帮助。谢谢
在CommandText
之前,您应该尝试为过程命名,如下所示:
OracleCommand cmd = new OracleCommand("getNextPanel", _conn);
当您通过CommandType.StoredProcedure
调用参数OracleParameter
时,它必须与参数名称(而不仅仅是类型)完全匹配
为什么cmd.Parameters.Add(op);
要运行两次?此外,op.Direction = ParameterDirection.inputOutput;
"i"字母必须大写(可能是打字错误)。
给出的步骤是由我开发的一个工作示例执行的,遵循以下步骤:从C#调用Oracle存储过程?