powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / INSERT из коллекции. Надо как-то схитрить
5 сообщений из 5, страница 1 из 1
INSERT из коллекции. Надо как-то схитрить
    #39354897
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так делать нельзя, оракл ругается:
Код: plsql
1.
2.
3.
4.
5.
6.
  type table_of_something is table of <something>;
  coll table_of_something;
begin
  forall i in coll.first .. coll.last
  insert into my_table (id, column1, column2, column3, ...)
  values (i, coll.column1, coll.column2, coll.column3, ...);


Код: plsql
1.
Error(34,11): PLS-00430: FORALL iteration variable I is not allowed in this context


А очень хочется вставлять в таблицу числа от 1 до N. Не приходит в голову ничего лучше, чем создать сиквенс и его каждый раз перед употреблением (или после) сбрасывать.
...
Рейтинг: 0 / 0
INSERT из коллекции. Надо как-то схитрить
    #39354903
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич,

Причина ограничения в том, что forall делает множественное связывание (binding) и разовое выполнение (execution).
Во время связывания SQL движок ничего не знает про PL/SQL индекс массива.

Можно в цикле for loop заполнить вспомогательную коллекцию, а в forall сделать вставку.
А можно извратиться через пакетную функцию инкремента и глобальную переменную. Но это будет хуже - на каждую строку вызов PL/SQL функции.
...
Рейтинг: 0 / 0
INSERT из коллекции. Надо как-то схитрить
    #39354906
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич,

insert into table select * from table(col).

с дефолт sequence значениями должно работать на 12с.
...
Рейтинг: 0 / 0
INSERT из коллекции. Надо как-то схитрить
    #39354937
create type ...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никанор Кузьмич,

замени цикл на инсерт-селект
...
Рейтинг: 0 / 0
INSERT из коллекции. Надо как-то схитрить
    #39354945
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create type ...замени цикл на инсерт-селектЕсли типы пихать куда ни попадя ради сиюминутных задачонок, то получится типов ад.
Самое правильное - именно ещё одна скалярная коллекция.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / INSERT из коллекции. Надо как-то схитрить
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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