ловить созданные идентификаторы в цикле курсора - PullRequest
1 голос
/ 09 декабря 2010

У меня есть следующий курсор (что-то вроде этого в любом случае), который я использую для копирования записей для таблицы, которая является частью отношения многих ко многим. Мне нужны новые идентификаторы, сгенерированные во время оператора INSERT INTO B, чтобы обновить таблицу соединений с помощью.

DECLARE

BEGIN
   FOR rec IN (SELECT id
                 FROM A
                WHERE group_id = 7)
   LOOP
      INSERT INTO B (b_id, thing2, ...stuff...);

      INSERT INTO C (rec.id, /* new ID generated by previous insert statement */
      COMMIT;
   END LOOP;
END;
/

Как получить значение b_id после вставки для использования во втором операторе INSERT?

1 Ответ

4 голосов
/ 09 декабря 2010

Используйте предложение RETURNING :

DECLARE

  v_bid B.b_id%TYPE;

BEGIN
   FOR rec IN (SELECT id
                 FROM A
                WHERE group_id = 7)
   LOOP
     INSERT INTO B (b_id, thing2, ...stuff...) RETURNING b_id INTO v_bid;

     INSERT INTO C (rec.id, /* new ID generated by previous insert statement */
     COMMIT;
   END LOOP;
END;

Тем не менее, возможно, что эта операция может быть выполнена без использования курсора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...