当A表中某一字段更新时,B表内容复制一遍改变某一字段插入B表

qq_15637797 2017-01-04 09:17:53
A表
字段一 字段二 字段三
Q W 0
E R 0
B表
字段四 字段五 字段六
A C 0
G H 0
当把表A中字段三更新为1,表内容显示如下:
A表
字段一 字段二 字段三
Q W 1
E R 1
B表
字段四 字段五 字段六
A C 0
G H 0
A C 1
G H 1
求大神帮忙。
...全文
314 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_15637797 2017-01-04
  • 打赏
  • 举报
回复
@卖水果的net 不知道怎么用书面语来描述,我觉得好无奈啊
qq_15637797 2017-01-04
  • 打赏
  • 举报
回复

CREAT OR REPLACE TRIGGER TRIG_I
BEFORE UPDATE ON 表A
DECLARE IVSN NUMBER;
BEGIN 
SELECT DISTINCT 字段六 INTO IVSN FROM 表B;
IF NEW.字段三NOT IN IVSN THEN
INSERT INTO 表B
SELECT 字段四,字段五,MAX(字段六)+1 AS 字段六
FROM 表B
GROUP BY 字段四,字段五;
END IF;
END;
这么写有问题,麻烦告诉我问题在哪里,初学者实在太笨了。
卖水果的net 2017-01-04
  • 打赏
  • 举报
回复
引用 4 楼 qq_15637797 的回复:
我的意思是说你写的这个,得到的结果也不是我说的这个样子啊,和我说的不是一个意思
说一下你的目的,更新一行数据,写几行,更新两行写几行,另外这两张表有什么关联关系; PS:他人回复了你的贴子,如果还想追上问,你最好引用 或 @ 一下,这样系统会通知对方;
H_Gragon 2017-01-04
  • 打赏
  • 举报
回复

----建立这个触发器就能满足你的需求
create or replace trigger trig_T
before update on A表
for each row
begin
  if :New.字段三 = 1 then
    insert into B表
      select 字段四, 字段五, 1 from B表 t where t.字段六 = 0;
  end if;
end;
H_Gragon 2017-01-04
  • 打赏
  • 举报
回复

----建立这个触发器就能满足你的需求
create or replace trigger trig_T
before update on A表
for each row
begin
  if :New.字段三 = 1 then
    insert into B表
      select 字段四, 字段五, 1 from B表 t where t.字段六 = 0;
  end if;
end;
qq_15637797 2017-01-04
  • 打赏
  • 举报
回复
我的意思是说你写的这个,得到的结果也不是我说的这个样子啊,和我说的不是一个意思
卖水果的net 2017-01-04
  • 打赏
  • 举报
回复
引用 2 楼 qq_15637797 的回复:
亲,你这个貌似和我说的内容有点出入啊
肯定有出入,我只是给你提供示例代码,具体的业务规则,你要自己组织;
qq_15637797 2017-01-04
  • 打赏
  • 举报
回复
亲,你这个貌似和我说的内容有点出入啊
卖水果的net 2017-01-04
  • 打赏
  • 举报
回复

SQL> 
SQL> create table a(c1 varchar(10), c2 varchar(10), c3 int);
Table created
SQL> create table b(c1 varchar(10), c2 varchar(10), c3 int);
Table created
SQL> create trigger tri_a_up
  2  before update on a
  3  for each row
  4  begin
  5      insert into b values(:new.c1, :new.c2, :new.c3);
  6  end;
  7  /
Trigger created
SQL> insert into a values('A','B',0);
1 row inserted
SQL> insert into a values('C','D',0);
1 row inserted
SQL> update a set c3 = 1 ;
2 rows updated
SQL> select * from b;
C1         C2                                              C3
---------- ---------- ---------------------------------------
A          B                                                1
C          D                                                1
SQL> drop table a purge;
Table dropped
SQL> drop table b purge;
Table dropped

SQL> 

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧