我試圖弄清楚如何獲取正在存儲過程中保存的動態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,那麼這不是絕對適合您的情況,這是另一個問題,但嘗試將這兩件事分開! –