对于如何从现有行(编辑)中单独修改哪些行以及仅插入哪些行,有什么建议吗?
我知道减号可以提取任何以任何方式修改的行(添加/删除/编辑),但现在我觉得区分这3种类型中的“编辑”的唯一方法是比较相应记录之间共享的“硬值”,并检测列的更改.
以下面为例:
Table GarageBefore
__________________________
|Make |Color |VIN |Driver |
|AUDI |GRAY |650 |SMITH |
|BMW |SILV |808 |JOHNS |
|BMW |GREE |754 |CARRO |
|CHEV |WHIT |532 |JONES |
|_________________________|
Table GarageAfter
__________________________
|Make |Color |VIN |Driver |
|AUDI |GRAY |650 |SMITH |
|BMW |SILV |303 |JOHNS |
|BMW |GREE |754 |CARRO |
|BUIC |BLAC |400 |JAMES |
|CHEV |WHIT |532 |JONES |
|_________________________|
Desired Result
(Modified Existing Rows?)
|BMW |SILV |303 |JOHNS |
(Added Rows?)
|BUIC |BLAC |400 |JAMES |发布于 2015-08-13 05:24:18
从你发布的数据集来看,没有。可以添加“修改”列,该列包含一个标志,该标志指示行是否已被修改。可以通过表上的触发器来维护该列,或者,在我看来,您可以将对该表的插入/更新封装在存储过程中,并让该过程维护该列。
发布于 2015-08-13 21:03:24
create table garage
(
make varchar2(10),
color varchar2(10),
vin number,
driver varchar2(10)
);
insert into garage values ('AUDI', 'GRAY', 650, 'SMITH');
insert into garage values ('BMW', 'SILV', 808, 'JOHNS');
insert into garage values ('BMW', 'GREE', 754, 'CARRO');
insert into garage values ('CHEV', 'WHIT', 532, 'JONES');
commit;让我们在这里查询一下时间:
select sysdate from dual;
SYSDATE
-------------------
2015-08-13 22:52:30做一些修改:
update garage set vin = 303 where vin = 808;
insert into garage values ('BUIC', 'BLAC', 400, 'JAMES');
commit;让我们再次查询一下时间:
select sysdate from dual;
SYSDATE
-------------------
2015-08-13 22:52:42现在,让我们使用闪回版本查询并找到这段时间内的修改:
select
garage.*,
garage.rowid,
versions_starttime as starttime,
versions_operation as operation
from garage versions between timestamp
timestamp'2015-08-13 22:52:30' and timestamp'2015-08-13 22:52:42'
where versions_operation is not null;
MAKE COLOR VIN DRIVER ROWID STARTTIME OPERATION
---------- ---------- ---- ---------- ------------------ --------------------- ----------
BUIC BLAC 400 JAMES AAAWKFAAEAAAAJcAAE 13-AUG-15 10.52.36 PM I
BMW SILV 303 JOHNS AAAWKFAAEAAAAJcAAB 13-AUG-15 10.52.36 PM U在这里您可以看到宝马,SILV行被更新(U在OPERATION列),BUIC,BLAC行被插入(I在列OPERATION中)。
(请注意,ROWID可能会更改。)
https://dba.stackexchange.com/questions/110864
复制相似问题