Получить изменения, сделанные с помощью скрипта

Мне нужно написать скрипт, чтобы удалить конкретные записи в базе данных, которые необходимо повторно ввести для пользователя, потому что они повреждены.

Сценарий очень прост. Сначала я должен определить записи, которые нужно удалить, и их зависимости и удалить их все.

Я проверил мой сценарий в моей среде разработки, и он работал хорошо. Меня беспокоит то, что когда этот сценарий будет развернут в производство, он удалит записи, которые необходимо удалить, но я хотел бы создать какой-то отчет об удаленных записях, чтобы предоставить его клиенту.

Как создать отчет об удаленных строках?

Как лучше всего подготовить этот отчет? Должен ли я выполнить катушку? Есть хорошая практика или есть несколько советов, которые вы могли бы дать мне?

Заранее спасибо!

Марио.

1 ответ

Я думаю, что лучший способ это пойти с комбо CREATE AS SELECT а также MINUS оператор.

  • Во-первых, вы создаете временную таблицу с CREATE TABLE t_dry AS (SELECT * FROM t)
  • Во-вторых, вы снова запускаете скрипт *_dry столы,
  • наконец, вы делаете minus между вашим источником и сухим.

Например:

SQL Fiddle

Настройка схемы 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 |
Другие вопросы по тегам