Получить изменения, сделанные с помощью скрипта
Мне нужно написать скрипт, чтобы удалить конкретные записи в базе данных, которые необходимо повторно ввести для пользователя, потому что они повреждены.
Сценарий очень прост. Сначала я должен определить записи, которые нужно удалить, и их зависимости и удалить их все.
Я проверил мой сценарий в моей среде разработки, и он работал хорошо. Меня беспокоит то, что когда этот сценарий будет развернут в производство, он удалит записи, которые необходимо удалить, но я хотел бы создать какой-то отчет об удаленных записях, чтобы предоставить его клиенту.
Как создать отчет об удаленных строках?
Как лучше всего подготовить этот отчет? Должен ли я выполнить катушку? Есть хорошая практика или есть несколько советов, которые вы могли бы дать мне?
Заранее спасибо!
Марио.
1 ответ
Я думаю, что лучший способ это пойти с комбо CREATE AS SELECT
а также MINUS
оператор.
- Во-первых, вы создаете временную таблицу с
CREATE TABLE t_dry AS (SELECT * FROM t)
- Во-вторых, вы снова запускаете скрипт
*_dry
столы, - наконец, вы делаете
minus
между вашим источником и сухим.
Например:
Настройка схемы Oracle 11g R2:
CREATE TABLE t
("a" int, "b" int)
;
INSERT ALL
INTO t ("a", "b")
VALUES (1, 2)
INTO t ("a", "b")
VALUES (3, 4)
INTO t ("a", "b")
VALUES (5, 6)
SELECT * FROM dual
;
CREATE TABLE t_dry
AS (SELECT * FROM t);
;
update t_dry set "b" = 7 where "a" = 5;
delete from t_dry where "a" =3;
INSERT INTO t_dry ("a", "b")
VALUES (8, 9)
;
Запрос 1:
SELECT A.*
FROM (
(
SELECT '+' AS "Diff", T_DRY.* FROM T_DRY
MINUS
SELECT '+' AS "Diff", T.* FROM T
)
UNION ALL
(
SELECT '-' AS "Diff", T.* FROM T
MINUS
SELECT '-' AS "Diff", T_DRY.* FROM T_DRY
)
) A
ORDER BY A."a" , "Diff" DESC
| Diff | a | b |
|------|---|---|
| - | 3 | 4 |
| - | 5 | 6 |
| + | 5 | 7 |
| + | 8 | 9 |