Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ORA-01013: user requested cancel of current operation / 5 сообщений из 5, страница 1 из 1
28.09.2017, 13:17:59
    #39527626
aidynchik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01013: user requested cancel of current operation
Всем доброго дня! Имеется приложение Delphi 7, компоненты DOA и Oracle 11g.
Стоит задача передать файл CLOB в базу, там его распарсить и закинуть в таблицу.
Парсингом занимается хранимая процедура.
Кинул компонент TOracleQuery(spLoad), TOracleEvent(evNext) и TcxProgressBar(pBar).
У spLoad включил свойство Threaded = True. Передаю в spLoad CLOB и делаю
Код: pascal
1.
2.
3.
4.
5.
       spLoad.Execute;  
       while spLoad.ThreadIsRunning do begin
         Application.ProcessMessages;
         Sleep(10)
       end;



а на событие evNext наращиваю TcxProgressBar.
Так вот, если записей мало (3к-10к), то все работает отлично. Если записей свыше 100 тысяч, то во время обработки выходит ошибка:
"ORA-01013, user requested cancel of current operation". Почему?

В документашке DOA написано "Any executing query can be aborted by calling the TOracleSession.BreakExecution method.
This causes an "ORA-01013, user requested cancel of current operation"
exception for the currently executing query in that session."
Но я же этого не делаю... Куда копать?
...
Рейтинг: 0 / 0
28.09.2017, 16:14:06
    #39527772
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01013: user requested cancel of current operation
aidynchik,

А срабатывание какого-нить таймаута такой эффект может вызвать? С Ораклом последний раз сражался лет 5 назад, но почему-то именно это в голову пришло..
...
Рейтинг: 0 / 0
28.09.2017, 16:44:25
    #39527803
mbb
mbb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01013: user requested cancel of current operation
aidynchik, чисто для "разведки" делал так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
procedure TForm1.Button1Click(Sender: TObject);
//insert into my_xml values(3, :PFX,  XMLType(:XML, nls_charset_id('CL8MSWIN1251')))
// Структура my_xml
//|Поле      |Тип       |Длина  |Точность  |Null        |Default  |Комментарии  
//|SID       |NUMBER    |22     |          |Not null !  |         |             
//|FILE_XML  |VARCHAR2  |15     |          |Y           |         |             
//|XT        |XMLTYPE   |2000   |          |Y           |         |             

var LOB: TLOBLocator;
  Buffer: array[0..4095] of char;
  f: file;
  numRead: Integer;
begin
  if not OpenDialog.Execute then Exit;
  if not os.Connected then os.Connected := True;

  with oq do
  begin

    LOB := TLOBLocator.CreateTemporary(os, otBLOB, True);
    AssignFile(f, OpenDialog.FileName);
    Reset(f, 1);
    repeat
      BlockRead(f, Buffer, SizeOf(Buffer), numRead);
      LOB.Write(Buffer, numRead);
    until (NumRead = 0) or (SizeOf(Buffer) <> NumRead);
    CloseFile(f);

    SetComplexVariable('XML', LOB);
    SetVariable('PFX', ExtractFileName(OpenDialog.FileName));
    Execute;
    LOB.Free;

  end;

  os.Connected := False;

end;



С файлами большого объёма - они целиком не влезают в переменную, отсылаемую на сервер. Но у меня "ругался" Oracle на невалидность XML - он же был обрезан, но связь вроде не рвалась. В отдельной нити не пробовал.
Этой процедурой загружал довольно большие xml-файлы, выбирал из них данные. Небольшие файлики грузились беспроблемно и без всяких буферов и LobLocator.
...
Рейтинг: 0 / 0
29.09.2017, 06:12:21
    #39528038
aidynchik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01013: user requested cancel of current operation
DarkMaster,

да в том-то и дело, что никаких таймаутов вроде бы нет... Если выключить Threaded = True, то все грузится без проблем
...
Рейтинг: 0 / 0
29.09.2017, 08:13:50
    #39528060
aidynchik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01013: user requested cancel of current operation
Проблема решена - нужно было просто новую сессию создать, а не цепляться к уже существующей
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ORA-01013: user requested cancel of current operation / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]