VB программа 6 обрабатывает запись и вставку во временной таблице, то эти записи перемещаются из этой временной таблицы в реальную таблицу какOracle возвращает параллельный запрос до фактической работы заканчивает
connection.Execute "INSERT INTO MAIN_TABLE SELECT * FROM TEMP_TABLE"
Временная таблица затем усеченный при записи переносятся
connection.Execute "TRUNCATE TABLE TEMP_TABLE"
Это работает отлично до тех пор пока я использую PARALLEL подсказку для INSERT запроса. Я получаю эту ошибку на TRUNCATE
ORA-00054: Ресурс занят и приобрести с NOWAIT указанной или тайм-аут истек
Мне кажется, что параллельные запрос возвращает до завершения задания и усечь выдается команда вызывая блокировку.
Я проверил количество записей вставлены, как показано ниже, и обнаружил, что гораздо меньше, чем число записей в таблице временного
connection.Execute "INSERT /*+ PARALLEL */ INTO MAIN_TABLE SELECT * FROM TEMP_TABLE", recordsAffected
Есть ли способ ждать INSERT для завершения?
Какая строка подключения? Можете ли вы указать более длительный тайм-аут? – dbmitch
Сделайте 'Delete', а не' Truncate'. Но если это всего лишь временная таблица, зачем вам вообще удалять? 'ON COMMIT {DELETE | PRESERVE} ROWS' уничтожит таблицу после каждого фиксации | сессия. – topshot
@dbmitch Это не о TIMEOUT, но connection.Execute возвращает, что приводит к выполнению следующего запроса, в то время как первый из них все еще находится в процессе – bjan