Выполнение команды Oracle через C # - ошибка: ORA-00933: команда SQL не завершена должным образом - PullRequest
1 голос
/ 04 июля 2019

Я использую Oracle 12c в качестве базы данных, C # Web Application. Я пытаюсь выполнить запрос Oracle из C # и загрузить данные в таблицу данных. Я получаю сообщение об ошибке типа ORA-00933: команда SQL не завершена должным образом. Я выполнил тот же запрос в Toad и впервые получил ту же ошибку, но если я снова запустил тот же запрос в жабе, данные возвращают результаты. Я не уверен, в чем проблема синтаксиса.

Я попробовал следующий код:

  using (var cmd = new OracleCommand {Connection = cn}) 
            {
                var selectStatement =  "select * from tablename OFFSET @Offset ROWS FETCH NEXT 10000 ROWS ONLY;";

                 cn.Open(); 
                 cmd.CommandText = selectStatement;

                 cmd.Parameters.Add("@Offset", OracleDbType.Int64); 
                 for (var index = 0; index < totalRecords; index++) 
                 { 
                     if (index % 10000 == 0) 
                     {
                         cmd.Parameters["@Offset"].Value = index; 
                         var dt = new DataTable()
                         {
                               TableName = tblName+"_"+index};
                               dt.Load(cmd.ExecuteReader());
                               dataTables.Add(dt);
                               tableIndex += 1;
                         }
                     }
                 }
             }

Я пытаюсь получить результаты постранично. Ошибка отображается в строке cmd.ExecuteReader. Как это исправить?

Обновление 1: два решения, которые работали для этой проблемы.

 var selectStatement = "Select * from tableName OFFSET :Offset ROWS FETCH NEXT 10000 ROWS ONLY";
 cmd1.CommandText = selectStatement;
 var numParam = new OracleParameter();
 numParam.ParameterName = "Offset";
 numParam.OracleDbType = OracleDbType.Int32;
 numParam.Direction = ParameterDirection.Input;
 numParam.Value = offsetvalue;  

cmd1.Parameters.Add(numParam);

Я удалил точку с запятой из запроса и также использовал параметр как: Offset, а не @Offset Спасибо

...