通过脚本完成更改

时间:2017-10-22 22:22:50

标签: sql oracle11g sql-delete spool

我需要编写一个脚本,以便删除数据库中需要为用户重新输入的特定记录,因为它们已损坏。

脚本非常简单。我首先需要识别要删除的记录及其依赖项并将其全部删除。

我在开发环境中测试了我的脚本并且运行良好。我担心的是,当这个脚本被部署到生产中时,它将删除需要删除的记录,但是我想生成某种已删除记录的报告,以便将其提供给客户。

如何生成已删除行的报告?

制作此报告的最佳方式是什么?我应该执行一个假脱机吗?有没有好的做法或者有一些提示可以给我?

提前致谢!

马里奥。

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是使用组合CREATE AS SELECTMINUS运算符。

  • 1,您使用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

<强> Results

| Diff | a | b |
|------|---|---|
|    - | 3 | 4 |
|    - | 5 | 6 |
|    + | 5 | 7 |
|    + | 8 | 9 |