首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保持列的更新?

如何保持列的更新?
EN

Stack Overflow用户
提问于 2016-05-23 00:13:59
回答 2查看 47关注 0票数 0

我创建了以下表格:

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

);

我插入了以下数据:

代码语言:javascript
复制
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“的更新?

我使用以下查询来添加这两个表:

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

代码语言:javascript
复制
update A set numberA=10 where codeA='0x1';

现在,0X1应为0x1=18

EN

回答 2

Stack Overflow用户

发布于 2016-05-23 01:15:16

创建一个视图,它将始终是最新的!

代码语言:javascript
复制
create view AandB (code, total) as
SELECT a.code, a.numberA + b.numberB
FROM A
INNER JOIN B ON (a.codeA = b.codeB)
票数 1
EN

Stack Overflow用户

发布于 2016-05-23 00:35:32

您可以创建一个trigger,它将在对表"A“和"B”的列"number“进行每次更新时执行。触发器的主体可以与update语句相同:

代码语言:javascript
复制
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的触发器)

代码语言:javascript
复制
WHERE ab.code = :NEW.numberA

(对于表B的触发器)

代码语言:javascript
复制
WHERE ab.code = :NEW.numberB
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37376640

复制
相关文章

相似问题

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