BULK COLLECT and INSERT

Tolmachov Dmitiry
Дата: 27.02.2007 16:15:06
Привет, соучастникам!

Oracle Database 10g Enterprise Edition Release 10.2.0.2.0
Есть рабочая конструкция типа:
UPDATE address
      SET lead_sales_business_segment = l_segment,
             business_segment         = l_segment,
             last_updated_by          = l_lastupdatedby,
             last_update_date         = SYSDATE
 WHERE customer_id = l_customer_id
RETURNING address_id BULK COLLECT INTO addr_id_array1;
При попытке распространить технологию на конструкцию:
INSERT INTO ... SELECT ... FROM address WHERE ... RETURNING address_id BULK COLLECT INTO addr_id_array1;
Ругается на неверное окончание фразы. Причем
INSERT INTO ... VALUES() ... RETURNING address_id INTO addr_id_array1;
работает. Кто-нибудь может пояснить почему так? Если я ошибаюсь в синтаксисе, то приведите, пожалуйста, рабочий код.
dmidek
Дата: 27.02.2007 16:24:02
Дмитрий, это известно.
Во фразе INSERT SELECT нельзя использовать RETURNING.
Когда мы составляли списочек "Чего Вам не хватает в Oracle" я занес эту фичу туда ...
Tolmachov Dmitiry
Дата: 27.02.2007 16:26:44
Спасибо, большое. Я хотел просто убедиться, что это все еще не работает. А так нужно порой!
Jannny
Дата: 27.02.2007 17:45:16
dmidek
Когда мы составляли списочек "Чего Вам не хватает в Oracle" я занес эту фичу туда ...

Tolmachov Dmitiry
Я хотел просто убедиться, что это все еще не работает.
Вывод - списочек не в том месте :)
dmidek
Дата: 27.02.2007 17:50:08
Jannny
dmidek
Когда мы составляли списочек "Чего Вам не хватает в Oracle" я занес эту фичу туда ...

Tolmachov Dmitiry
Я хотел просто убедиться, что это все еще не работает.
Вывод - списочек не в том месте :)


Списочек на sql.ru
На философию потянуло
Jannny
Дата: 27.02.2007 18:01:01
dmidek
Jannny
dmidek
Когда мы составляли списочек "Чего Вам не хватает в Oracle" я занес эту фичу туда ...

Tolmachov Dmitiry
Я хотел просто убедиться, что это все еще не работает.
Вывод - списочек не в том месте :)

Списочек на sql.ru
На философию потянуло
Я помню, где он, только не так много разработчиков Оракла тут, очевидно, ошивается :)
dmidek
Дата: 27.02.2007 18:16:12
Jannny
dmidek
Jannny
dmidek
Когда мы составляли списочек "Чего Вам не хватает в Oracle" я занес эту фичу туда ...

Tolmachov Dmitiry
Я хотел просто убедиться, что это все еще не работает.
Вывод - списочек не в том месте :)

Списочек на sql.ru
На философию потянуло
Я помню, где он, только не так много разработчиков Оракла тут, очевидно, ошивается :)


Напрасно
Надо его по почте послать.
KoTTT
Дата: 01.03.2007 06:02:48
Буквально вчера столкнулся, что очень не хватает такого.
А может как-то можно извернуться?
KoTTT
Дата: 01.03.2007 06:18:09
mcwhite
Дата: 01.03.2007 08:55:16
KoTTT
Буквально вчера столкнулся, что очень не хватает такого.
А может как-то можно извернуться?

DECLARE
    TYPE t_addr_col IS TABLE OF address%ROWTYPE INDEX BY pls_integer;
    addr_col t_addr_col;
BEGIN
    SELECT t.* BULK COLLECT INTO addr_col FROM address t WHERE ... ;
    FORALL n IN 1 .. addr_col.COUNT
        INSERT INTO ... VALUES (...);
END;
Требуемые значения id - в коллекции addr_col.

P.S. Звёздочку в select'е использовал исключительно для упрощения примера. В реальной задаче IMHO стоит явно перечислить имена полей таблицы.