我创建了以下表格:
create table AandB (
code varchar(9),
total number,
CONSTRAINT pk_code PRIMARY KEY (code)
);
create table A (
codeA varchar(9),
numberA number,
CONSTRAINT pk_codeA PRIMARY KEY (codeA)
);
create table B (
codeB varchar(9),
numberB number,
CONSTRAINT pk_codeB PRIMARY KEY (codeB)
);我插入了以下数据:
insert into AandB(code) values('0x1');
insert into AandB(code) values('0x2');
insert into AandB(code) values('0x3');
insert into A(codeA, numberA) values('0x1',5);
insert into A(codeA, numberA) values('0x2',6);
insert into A(codeA, numberA) values('0x3',1);
insert into B(codeB, numberB) values('0x1',8);
insert into B(codeB, numberB) values('0x2',10);
insert into B(codeB, numberB) values('0x3',12);问题是:如何使用触发器保持表"AandB“的更新?
我使用以下查询来添加这两个表:
UPDATE AandB ab
SET ab.total = (SELECT a.numberA + b.numberB
FROM A
INNER JOIN B
ON(a.codeA = b.codeB)
WHERE a.codeA = ab.code)现在,0X1 = 13。但是如果我更新表A:
update A set numberA=10 where codeA='0x1';现在,0X1应为0x1=18
发布于 2016-05-23 01:15:16
创建一个视图,它将始终是最新的!
create view AandB (code, total) as
SELECT a.code, a.numberA + b.numberB
FROM A
INNER JOIN B ON (a.codeA = b.codeB)发布于 2016-05-23 00:35:32
您可以创建一个trigger,它将在对表"A“和"B”的列"number“进行每次更新时执行。触发器的主体可以与update语句相同:
UPDATE AandB ab
SET ab.total = (SELECT a.numberA + b.numberB
FROM A
INNER JOIN B
ON(a.codeA = b.codeB)
WHERE a.codeA = ab.code)为了获得更好的性能,您可以向其添加一个"WHERE“子句,如下所示:
(对于表A的触发器)
WHERE ab.code = :NEW.numberA(对于表B的触发器)
WHERE ab.code = :NEW.numberBhttps://stackoverflow.com/questions/37376640
复制相似问题