Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Процедура UPDATE’а поля COMMIT каждые 100 строк


Автор: AlexsandeG 8.2.2023, 00:47
Всем привет! 
Помогите написать запрос, который будет ставить commit каждые 100 строк при добавлении/обновлении данных в таблицу.
То есть нужно сделать цикл, который на каждой 100-й строчке будет выполнять commit и так до тех пор пока все данные не будут добавлены, потому что их очнь много.
Я пытался сделать через if, но как-то не получилось, надеюсь кто-нибудь поможет разобраться.
Спрашивал у знакомых, кто тоже работает с sql, но у них тоже не очень вышло, поэтому решил попытать счастье тут)
Буду очень благодарен, если хотя бы есть какие-то предположения по этому вопросу.
И объясните мне, какие процедуры считаются не хранимыми.

Автор: Akina 9.2.2023, 10:16
Маловменяемое описание.

В каком виде находятся данные для вставки?

Цитата(AlexsandeG @  8.2.2023,  01:47 Найти цитируемый пост)
какие процедуры считаются не хранимыми

В общем любая созданная пользователем процедура - хранимая.

Формально можно считать не хранимой разве что анонимную процедуру, если, конечно, СУБД их поддерживает. Поддерживает ли их конкретно Оракл, я лично ХЗ.

Автор: AlexsandeG 9.2.2023, 21:30
Хорошо, откинем процедуры, с ними понятно. 
Как правильно тогда составить запрос на update, чтобы при этом срабатывал commit каждые 100 строк?
Единственная моя догадка, что это цикл, но как воплотить это в реальность я не понимаю.

Автор: Akina 10.2.2023, 08:01
Цитата(AlexsandeG @  9.2.2023,  22:30 Найти цитируемый пост)
Как правильно тогда составить запрос на update, чтобы при этом срабатывал commit каждые 100 строк?

Столь общий вопрос предполагает только общий ответ. В формате одного запроса это нереализуемо. Только в виде итеративной процедуры.

Более конкретный ответ можно получить только после предоставления деталей. В частности, ответа на ранее заданный вопрос.

Автор: AlexsandeG 10.2.2023, 22:20
Возможно я не совсем информативно описал всю картину происходящего,  не буду отрицать. Попробую по другому объяснить...
Представим, что у меня есть таблица. В эту таблицу необходимо занести 1000 новых строк использую update. Но при всем этом у меня на каждые, предположим, 100 строк должен выполняться commit.
Это вся суть задания, которая была мне дана, а из этого задания я уже сделал вывод, что мне необходимо написать запрос-цикл.
Суть моей проблемы: я только изучаю sql, соответственно я даже не могу понять с чего мне начать писать запрос. Искал информацию в интернете, но мне это особо не помогло, тяжело разобраться самому. И как вы догадываетесь, то я решил прибегнуть к месту, где возможно вы мне и поможете.
Не знаю, какое еще описание задание добавить сюда.

Автор: Akina 12.2.2023, 13:20
Цитата(AlexsandeG @  10.2.2023,  23:20 Найти цитируемый пост)
В эту таблицу необходимо занести 1000 новых строк использую update.

Ну бред же бредовый! 

Даже "только изучая SQL", нельзя не понимать разницу между "необходимо занести 1000 новых строк" (запрос INSERT, увеличивает количество записей в таблице) и "использую update" (запрос UPDATE, не изменяет количество записей в таблице).

Автор: LSD 12.2.2023, 18:26
Код

begin
      for i in 1 .. 100000
      loop
          insert into t values ( i, 'x' );
          if REMAINDER(i, 100) == 0 then
              commit;
          end if;
      end loop;
      commit;
  end;
 /

Автор: AlexsandeG 15.2.2023, 02:43
Akina, Привет, это снова я. Да, я напутал все. В таблице уже имеются записи, соответственно просто нужно сделать update, в котором будет цикл ставить "commit;" на каждые 100 строк.

Автор: Akina 15.2.2023, 07:47
AlexsandeG, в любом случае возвращаемся к вопросу "Где конкретика"?

Показывайте пример. Полный CREATE TABLE таблицы, в которой надо обновлять данные, INSERT INTO с начальными данными (7-10 записей), сами данные для вставки (3-5 строк) с подробным описанием, в каком они виде (файл, массив, что-то ещё), и требуемый финальный результат после обновления, опять же с подробным описанием, почему именно так.

Скорее всего решение будет соответствовать шаблону, который выше опубликовал LSD.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)