Мне нужно сделать резервную копию всех записей, которые будут удалены с помощью следующего кода. Для этого я пытаюсь заменить все команды удаления на select *
и сохранить его в файл, используя jdb c ResultSet, но я застрял в приведенном ниже фрагменте, где записи помечаются, а затем удаляются в al oop. Я попытался расширить эту логику c с помощью операторов select..in and...exist
, но запрос обрабатывается слишком долго и может произойти сбой в работе. Я также пытался использовать sys_refcursor
, но проблема в том, что delete
находится внутри al oop и курсор не может быть обновлен. Итак, базовое c требование - как я могу сохранить все записи, которые были удалены с помощью следующего кода, в out_parameter и вернуть его. Пожалуйста помоги! Спасибо.
DECLARE
CURSOR purger(p_reference IN VARCHAR2) IS
SELECT DISTINCT id, reference, PARENT, LEVEL
FROM table ps1
START WITH ps1.reference = p_reference
CONNECT BY PRIOR ps1.reference = ps1.parent;
BEGIN
FOR i IN (SELECT DISTINCT reference
FROM table
WHERE PARENT IS NULL)
LOOP
l_level := 'N';
FOR j IN purger(i.reference)
LOOP
IF j.level > 1
THEN
l_level := 'Y';
END IF;
END LOOP;
IF l_level = 'N'
THEN
DELETE FROM tale WHERE reference = i.reference;
END IF;
IF l_level = 'Y'
THEN
DELETE FROM table
WHERE id IN (SELECT DISTINCT id
FROM table ps1
START WITH ps1.reference = i.reference
CONNECT BY PRIOR ps1.reference = ps1.parent);
END IF;
END LOOP;
END