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

时间:2014-04-12 15:46:25

标签: c# oracle

当我尝试通过以下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的输出结果。。这就是我对光标的理解是什么...因为我不是oracle专家。现在回到最重要的一点。如果你们查看我的代码输入/输出光标,我得到的是Oracledbtype的C#枚举中的oracledbtype.refcursor,但是oracle SP正在使用输入/输出光标,这是我的错误的根源,因为我' m发送输入/输出参数作为refcursor而oracle SP有输入/输出游标而不是refcursor,但refcursor是我用C#编写代码时得到的。 非常感谢您的帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

# App path PASH="/Applications/Pashua.app/Contents/MacOS/Pashua" # Conf file path CONF="/tmp/conf.pash" # Create a temp conf file rm $CONF cat <<EOT >> $CONF tf.type = textfield tf.label = Example textfield tf.default = Textfield content tf.width = 310 tf.tooltip = This is an element of type “textfield” EOT # Run Pashua and store the variable VAR=$($PASH $CONF | cut -d '=' -f2) echo $VAR 之前你应该尝试给这个程序命名:

CommandText

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

调用参数OracleParameter时必须与参数名称(不仅仅是类型)完全匹配

为什么有CommandType.StoredProcedure两次?此外,cmd.Parameters.Add(op);“i”字母必须是大写字母(可能是拼写错误)。

我给出的一个工作示例采取了以下步骤:Calling Oracle stored procedure from C#?