Oracle Удалить родительскую запись, если вставка дочерней записи не удалась - PullRequest
0 голосов
/ 04 августа 2020

У меня следующая проблема с PL / SQL:

У меня есть родительская и дочерняя таблицы.

Использование PL / SQL LOOPS - Я вставляю записи в родительский, а затем путем вставки записей в дочерний

Мои требования следующие:

  1. Если вставить в родительский элемент не удается - просто распечатайте ошибку и продолжайте l oop
  2. Если родительский был заполнен, но потомок не работает, затем удалите также и родителя.

Есть мысли?

1 Ответ

2 голосов
/ 04 августа 2020

Establi sh a SAVEPOINT перед вставкой в ​​родительскую таблицу. Откат к точке сохранения в случае сбоя дочерней записи.

Вот так:

BEGIN
  FOR (... your source data for parents ... ) LOOP
    BEGIN
      SAVEPOINT xxcust_pre_insert;
      INSERT INTO parent_table...
      FOR ( ... your source data for children ...) LOOP
        INSERT INTO child_table...
      END LOOP;
    EXCEPTION
      WHEN others THEN
        ROLLBACK TO xxcust_pre_insert;
        -- Log the error or do whatever else you want.  Don't swallow it.
        -- Execution will continue with the next parent record to be inserted
  END LOOP;
  COMMIT;   -- optional at this point.  May want later, depending on your design
END;
...