Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何比较表中的数据(操作前后)?_Sql_Database_Oracle_Diff_Compare - Fatal编程技术网

Sql 如何比较表中的数据(操作前后)?

Sql 如何比较表中的数据(操作前后)?,sql,database,oracle,diff,compare,Sql,Database,Oracle,Diff,Compare,有没有免费的工具或方法来了解数据库表中发生了什么变化?我在过去非常成功地使用了MySQL(用于模式和数据)。我发现它也与Oracle兼容。试试,它为数据库提供了版本控制机制。您可以在更新之前复制一份 CREATE TABLE t2 AS SELECT * FROM t1 运行您的更新 然后显示差异 使用此选项可显示更新: SELECT * FROM t1 MINUS SELECT * FROM t2 使用此选项可显示删除: SELECT * FROM t2 WHERE NOT EXISTS(

有没有免费的工具或方法来了解数据库表中发生了什么变化?

我在过去非常成功地使用了MySQL(用于模式和数据)。我发现它也与Oracle兼容。

试试,它为数据库提供了版本控制机制。

您可以在更新之前复制一份

CREATE TABLE t2 AS SELECT * FROM t1
运行您的更新

然后显示差异

使用此选项可显示更新:

SELECT * FROM t1
MINUS
SELECT * FROM t2
使用此选项可显示删除:

SELECT * FROM t2
WHERE NOT EXISTS(SELECT 1 FROM t1 WHERE t1.primary_key = t2.primary_key)
最后,检查记录总数是否相同

SELECT count(*) FROM t1

SELECT count(*) FROM t2

注意:如果有其他会话更新t1,那么发现您的更新可能会很棘手。

确实应该避免触发,但是

如果您处于非生产环境中,则可以设置触发器以执行对新表的日志记录。您需要5个类似这样的字段:

LogTime DateTime;
Table   Varchar2(50); -- Table Name
Action  Char;         -- Insert, Update or Delete
OldRec  Blob;         -- Concatenate all your field Values
NewRec  Blob;         -- Ditto
这样做的好处是,您可以选择给定时间范围内的所有oldRec和newRec,并将其放入文本文件中。比较工具将通过突出显示您的更改来帮助您


有任何帮助吗?

如果操作是这样的,则不会显示任何已删除的记录。默认情况下,无法执行此操作。看看我最近对一个类似问题的回答: