Исключение из хранимой процедуры не обрабатывается правильно. - PullRequest
0 голосов
/ 03 мая 2018

SP ИСКЛЮЧЕНИЕ не удаляет данные, которые должны?

PROCEDURE TEST (TEST   IN  TABLE1.COLUMN1%TYPE, TEST2 IN  TABLE2.COLUMN1%TYPE)
IS
SEQ1 NUMBER;
SEQ2 NUMBER;

BEGIN
    SELECT seq_id.NEXTVAL INTO SEQ1 FROM DUAL;     
    INSERT INTO TABLE1 VALUES(SEQ1, TEST);

    SELECT seq_id2.NEXTVAL INTO SEQ2 FROM DUAL;
    INSERT INTO TABLE2 VALUES(SEQ2, TEST2);        
    COMMIT;
EXCEPTION WHEN OTHERS THEN
    ROLLBACK;
    DELETE FROM TABLE1 WHERE COLUMN0 = SEQ1;
    DELETE FROM TABLE2 WHERE COLUMN0 = SEQ1;
    RAISE;
END;

Если происходит ИСКЛЮЧЕНИЕ, я хочу удалить все из тех таблиц, которые содержат этот определенный идентификатор. Этот SP называется X раз, и у меня есть 3 таблицы, которые имеют отношение к столбцу. Первые два вызова в порядке, если третий выдает ошибку, я тоже хочу удалить эти предыдущие вставки.

TABLES
CALL TO SP  COLUMN1 - COLUMN2 - COLUMN3
1           1         2         3
2           1         2         3
3           1         2         ERROR

EXCEPTION
Delete from TABLES WHERE COLUMN2 = 2; 

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

ROLLBACK уже отменит ваши изменения, можете ли вы объяснить, почему вам нужны дополнительные операторы удаления?

Это будет работать, если вы хотите откатить вставки на случай, если что-то (= ДРУГОЕ) пойдет не так. Имейте в виду, что ваша последовательность также будет сброшена!

PROCEDURE TEST (TEST   IN  TABLE1.COLUMN1%TYPE, TEST2 IN  TABLE2.COLUMN1%TYPE)
IS

BEGIN
  INSERT INTO TABLE1 VALUES(seq_id.NEXTVAL, TEST);
  INSERT INTO TABLE2 VALUES(seq_id2.NEXTVAL, TEST2);        
  COMMIT;
EXCEPTION WHEN OTHERS THEN
  ROLLBACK;
  RAISE;
END;
0 голосов
/ 03 мая 2018

Похоже, что если вы измените ваш обработчик исключений, чтобы включить

DELETE FROM TABLE1 WHERE COLUMN2 = TEST2;
DELETE FROM TABLE2 WHERE COLUMN2 = TEST2;

это сделает то, что вы ищете.

Лучшим решением, однако, может быть удаление COMMIT и ROLLBACK из процедуры и фиксация только тогда, когда вы знаете, что вся ваша работа выполнена и успешна. Желаем удачи.

...