我需要编写一个脚本,以便删除数据库中需要为用户重新输入的特定记录,因为它们已损坏。
脚本非常简单。我首先需要识别要删除的记录及其依赖项并将其全部删除。
我在开发环境中测试了我的脚本并且运行良好。我担心的是,当这个脚本被部署到生产中时,它将删除需要删除的记录,但是我想生成某种已删除记录的报告,以便将其提供给客户。
如何生成已删除行的报告?
制作此报告的最佳方式是什么?我应该执行一个假脱机吗?有没有好的做法或者有一些提示可以给我?
提前致谢!
马里奥。
答案 0 :(得分:0)
我认为最好的方法是使用组合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
<强> Results 强>:
| Diff | a | b |
|------|---|---|
| - | 3 | 4 |
| - | 5 | 6 |
| + | 5 | 7 |
| + | 8 | 9 |