日期:2014-05-17  浏览次数:20705 次

请问这个功能如何在oracle中实现.解决后马上给分
CREATE   TABLE   AAA
(
ID   int   IDENTITY   (1,   1)   ,
NAME   varchar   (50)   NULL   ,
KEY1_OLD   varchar(255)   NULL,
PRIMARY   KEY(ID)
)


CREATE   TABLE   BBB
(
ID   int   ,
NAME   varchar(50),
KEY2_NEW   varchar(255)
)


CREATE   TABLE   TEST
(
ID   int   ,
NAME   varchar(100)   NULL,
AGE   int   NULL
PRIMARY   KEY(id)
)

INSERT   INTO   TEST   VALUES(100, 'AA ',20);
INSERT   INTO   TEST   VALUES(101, 'BB ',20);
INSERT   INTO   TEST   VALUES(102, 'CC ',20);
INSERT   INTO   TEST   VALUES(103, 'DD ',20);


对表test更新进行触发
分两种情况:
a:当直接修改主键时,需在AAA   表种记录如下信息;
执行update   TEST   SET   ID=1   WHERE   NAME= 'AA '后;

第一需求:在AAA表需有如下记录
ID   NAME   KEY1_OLD
111   id   1
第二需求:在BB表需有如下记录

ID   NAME   KEY2_NEW
111   id   100

说明:
AAA表中id为自增长类型;
AAA与BBB中的ID在关联的;
NAME就是主键或者其他字段名称;
KEY1_OLD   与KEY2_NEW为主键修改前的值与修改后的值.

b:当修改其他字段时(除主键外)时,需在AAA
a:当直接修改主键时,需在AAA   表种记录如下信息;
执行update   TEST   SET   NAME= 'EEEEEEE '   WHERE   ID=101;后;

第一需求:在AAA表需有如下记录
ID   NAME   KEY1_OLD
112   id   101
第二需求:在BB表需有如下记录

ID   NAME   KEY2_NEW
112   NAME   NULL

说明:
AAA表中id为自增长类型;
AAA与BBB中的ID在关联的;
AAA表中的name值为主键字段名称;
BBB表中的name值为本次修改的字段名称.

请问如何实现.谢谢.

------解决方案--------------------
SQL Server里的Identity列可以用Oracle中的Sequence对象来实现。