Как использовать ретроспективный запрос для получения удаленных строк?
Я пытаюсь протестировать хранимую процедуру, которая удаляет данные из таблицы, и у меня есть настройки, подобные этой:
Установка Oracle:
CREATE TABLE table_name ( id NUMBER );
Скрипт PL/SQL:
DECLARE
v_scn V$DATABASE.CURRENT_SCN%TYPE;
v_row TABLE_NAME%ROWTYPE;
BEGIN
INSERT INTO table_name VALUES ( 1 );
INSERT INTO table_name VALUES ( 2 );
INSERT INTO table_name VALUES ( 3 );
SELECT current_scn INTO v_scn FROM V$DATABASE;
-- call a procedure with side-effects such as:
DELETE FROM table_name WHERE id = 1;
SELECT *
INTO v_row
FROM (
SELECT * FROM table_name AS OF SCN( v_scn )
MINUS
SELECT * FROM table_name
);
DBMS_OUTPUT.PUT_LINE( 'One row deleted: ' || v_row.id );
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE( 'Not found' );
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE( 'Too many rows' );
END;
ROLLBACK;
Я ожидаю, что v_row
будет заполнен одной строкой, и ни один из обработчиков исключений не будет вызван. Тем не менее NO_DATA_FOUND
исключение вызывается.
- Почему это не работает?
- Как я могу использовать ретроспективный запрос, чтобы определить, какие строки были удалены?