Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / INSERT из коллекции. Надо как-то схитрить / 5 сообщений из 5, страница 1 из 1
26.11.2016, 00:04
    #39354897
Никанор Кузьмич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT из коллекции. Надо как-то схитрить
Вот так делать нельзя, оракл ругается:
Код: 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
26.11.2016, 01:28
    #39354903
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT из коллекции. Надо как-то схитрить
Никанор Кузьмич,

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

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

insert into table select * from table(col).

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

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


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