首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区分行修改和添加?

区分行修改和添加?
EN

Database Administration用户
提问于 2015-08-13 05:08:05
回答 2查看 42关注 0票数 2

对于如何从现有行(编辑)中单独修改哪些行以及仅插入哪些行,有什么建议吗?

我知道减号可以提取任何以任何方式修改的行(添加/删除/编辑),但现在我觉得区分这3种类型中的“编辑”的唯一方法是比较相应记录之间共享的“硬值”,并检测列的更改.

以下面为例:

代码语言:javascript
复制
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  |
EN

回答 2

Database Administration用户

发布于 2015-08-13 05:24:18

从你发布的数据集来看,没有。可以添加“修改”列,该列包含一个标志,该标志指示行是否已被修改。可以通过表上的触发器来维护该列,或者,在我看来,您可以将对该表的插入/更新封装在存储过程中,并让该过程维护该列。

票数 1
EN

Database Administration用户

发布于 2015-08-13 21:03:24

代码语言:javascript
复制
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;

让我们在这里查询一下时间:

代码语言:javascript
复制
select sysdate from dual;

SYSDATE
-------------------
2015-08-13 22:52:30

做一些修改:

代码语言:javascript
复制
update garage set vin = 303 where vin = 808;
insert into garage values ('BUIC', 'BLAC', 400, 'JAMES');
commit;

让我们再次查询一下时间:

代码语言:javascript
复制
select sysdate from dual;

SYSDATE
-------------------
2015-08-13 22:52:42

现在,让我们使用闪回版本查询并找到这段时间内的修改:

代码语言:javascript
复制
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行被更新(UOPERATION列),BUIC,BLAC行被插入(I在列OPERATION中)。

(请注意,ROWID可能会更改。)

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/110864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档