Я пытаюсь выяснить, как я могу получить результат динамического SQL-запроса, который хранится в процедуре хранилища.Как вернуть записи из Oracle динамического SQL в хранимой процедуре с ODP.NET
Процедура магазина проста:
CREATE OR REPLACE PROCEDURE PORT_CALL_PROCEDEURE(queryin IN varchar2,result out varchar2)
is
BEGIN
dbms_output.put_line(queryin);
EXECUTE IMMEDIATE queryin;
END ;
Путь I'am вызов из 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();
I'am получает исключение:
{"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 –
запрос был всего лишь примером, я отредактировал запрос вправо. –
Это не меняет смысл моего комментария! Вы видели ссылку на документацию, которую я опубликовал? Существует также краткий пример, показывающий, как это должно быть сделано. Если вы не знаете, как правильно выполнять динамический SQL в PL/SQL, это не совсем подходит в вашем случае, это еще одна проблема, но попытайтесь отделить две вещи! –