【发布时间】:2020-02-09 16:55:18
【问题描述】:
我需要创建存储过程来找出更新记录的旧值和新值。 它应该包括用于在运行时查找列名的动态查询。
我为此使用 oracle 12C。
create table student (
id number(6) primary key,
name varchar2(50),
city varchar2(50),
address varchar2(100),
createdDateTime date,
updatedDatetime date
);
insert into student values(1,'abc1','abc1','abc1','09-Jan-20','12-Jan-20');
insert into student values(2,'pqr','pqr','pqr','09-Jan-20',null);
学生桌-
ID Name City Address Create_time UpdatedTime
1 abc1 abc1 abc1 09-Jan-20 12-Jan-20
2 pqr pqr pqr 09-Jan-20 null
create table studentHistory (
id number(6) ,
name varchar2(50),
city varchar2(50),
address varchar2(100),
DatetimeCreated date
);
insert into StudentHistory values(1,null,'abc',null,'10-Jan-20');
insert into StudentHistory values(1,'abc',null,null,'11-Jan-20');
insert into StudentHistory values(1,null,null,'abc','12-Jan-20');
学生履历表-
ID Name City Address DatetimeCreated
1 null abc null 10-Jan-20
1 abc null null 11-Jan-20
1 null null abc 12-Jan-20
需要的输出-->
Id ColumnName Old Value New Value Updatetime
1 City abc abc1 '10-01-20'
1 name abc abc1 '11-01-20'
1 City abc abc1 '12-01-20'
【问题讨论】:
-
“我需要创建存储过程...” - 不,您需要创建一个触发器,它们用于此类目的。互联网上有无数个例子,做一些搜索,写一些代码。如果您无法使其正常工作,请回来 - 如果是这样,请编辑您的问题并发布您编写的代码以及您遇到的错误。
-
您应该将更新的旧值添加到历史记录表中。现在没有机会获得
UPDATE的旧值,除非它是最后一个值。然后你只需要一个SELECT来获取旧值。