我试图弄清楚如何获取正在存储过程中保存的动态SQL查询的结果。如何使用ODP.NET在存储过程中从Oracle动态SQL返回记录
的存储过程很简单:
CREATE OR REPLACE PROCEDURE PORT_CALL_PROCEDEURE(queryin IN varchar2,result out varchar2)
is
BEGIN
dbms_output.put_line(queryin);
EXECUTE IMMEDIATE queryin;
END ;
的方式我'从VS调用它是:
OracleCommand oracmd = GetCommand("PORT_CALL_PROCEDEURE", oraconn);
oraconn.Open();
string row = string.Empty;
StringBuilder sb = new StringBuilder();
sb.Append("SELECT * into result Where port = 'MSO'and Map = 'Local'");
sb.Append(" FROM VESSEL");
string commandString = sb.ToString();
command.Parameters.Add("query_in", OracleDbType.Varchar2, 10000000, commandString, ParameterDirection.Input);
command.Parameters.Add("result", OracleDbType.Varchar2, 10000000, `commandString, ParameterDirection.Output);`
oracmd.ExecuteNonQuery();
我'得到一个例外:
{"ORA-00905: missing keyword
ORA-06512: at \"BOAZ.PORT_CALL_PROCEDEURE\", line 7
ORA-06512: at line 1"}
任何帮帮我? 谢谢。
调用存储过程仅用于执行标量查询的目的是什么?通常这个动作可以在不使用存储过程的情况下完成!如果您不知道,请查看OracleCommand.ExecuteScalar方法。 http://docs.oracle.com/cd/E11882_01/win.112/e23174/OracleCommandClass。htm#i998581 –
查询只是一个例子,我将查询编辑到了正确的一个。 –
这并不会改变我评论的意义!你看到我发布的文档链接了吗?还有一个简短的例子,显示应该如何完成这些事情。如果您不知道如何在PL/SQL中正确执行动态SQL,那么这不是绝对适合您的情况,这是另一个问题,但尝试将这两件事分开! –