当我尝试通过以下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#编写代码时得到的。 非常感谢您的帮助。 感谢。
答案 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#?