求一个oracle 触发器

瘦马 2012-07-16 11:11:51
有表T1
字段id
code
……

有表t2
字段
gh(自动增长列)
id
code

现在需要一个触发器
当表t1新增(删除)一条记录时
把所插入记录的id、code插入到表t2中
(删除表t2中相同id的那条记账)

...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小德 2012-07-16
  • 打赏
  • 举报
回复
CREATE TABLE X1 (id NUMBER(5),code VARCHAR2(10));
CREATE TABLE X2 (gh NUMBER(5),id NUMBER(5),code VARCHAR2(10));

CREATE SEQUENCE seq_x2
MINVALUE 1
MAXVALUE 99999
START WITH 1
INCREMENT BY 1
NOCACHE;
SELECT seq_x2.NEXTVAL FROM dual;
SELECT seq_x2.CURRVAL FROM dual;

CREATE OR REPLACE TRIGGER xx1
AFTER INSERT OR DELETE ON x1 FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO x2(gh,id,code) VALUES (seq_x2.NEXTVAL,:NEW.id,:NEW.code);
END IF;

IF DELETING THEN
INSERT INTO x2(gh,id,code) VALUES (seq_x2.NEXTVAL,:old.id,:old.code);
END IF;
END xx1;

INSERT INTO x1 VALUES (100,'c100');
SELECT * FROM x2;
GH ID CODE
2 100 c100

DELETE FROM X1 WHERE ID=100;
SELECT * FROM x2;
GH ID CODE
2 100 c100
3 100 c100


小德 2012-07-16
  • 打赏
  • 举报
回复
(删除表t2中相同id的那条记账)
是指t2插入新纪录的时候要先删除Id相同的记录吗?
小德 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
原记录没有重复,不能删除
[/Quote]
那只要设置生成gh的序列不跟旧资料主键重复即可
瘦马 2012-07-16
  • 打赏
  • 举报
回复
原记录没有重复,不能删除
小德 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
原来已经有记录的,能怎么做吗?
[/Quote]
原来的记录要不要删除,看你的需求具体是什么,若不需要处理旧资料,则只需要考虑主键重复的问题,初步判断你说的T2表主键为gh,则只需要设置序列与旧资料不重复即可。

另,如果单纯为了记录T1表的操作明细,建议楼主还是再增加一个字段区分操作,如可增加NL字段,新增则为N,删除则为L,若为更新,则写一笔L和N..
瘦马 2012-07-16
  • 打赏
  • 举报
回复


原来已经有记录的,能怎么做吗?

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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