注册 登录
编程论坛 Oracle论坛

在线求助触发器

wangquanlCS 发布于 2008-11-27 12:55, 1305 次点击
比如说我有一个表A:
列1       列2   
username  age

当我在A里插入数据之后,跟踪表B
列1       列2    列3         列4          列5        列6
username  age   createtime  updatetime  deletetime  sate

记录了相同数据,并且使createtime字段的值为当前系统的时间,字段SATE的值为I.

更新删除的操作跟上无异,只是SATE的值分别为U和D
这里要注意,A表中被删除的数据,在B表中不被删除.

在线请求各为大虾相助,不胜感激~~~~
3 回复
#2
wangquanlCS2008-11-28 20:57
靠,自己搞出来了
create or replace trigger inupdetable
  before update or delete or insert on table_a
  for each row
declare
  c number;
begin
--判断数据库内是否有数据
  select count(*) into c from table_b where id = :new.id;

--没有数据的操作
  if c = 0 then
       --插入
    if inserting then
      insert into table_b(id,username,age,createtime,sate)
      values
        (:new.id,
         :new.username,
         :new.age,
         sysdate,
         'I');
        
      --更新
    elsif updating then
      insert into table_b(id,username,age,updatetime,sate)
      values
        (:new.id,
         :new.username,
         :new.age,
         sysdate,
         'U');
        
       --删除
    elsif deleting then
      update table_b
         set username        = :old.username,
             age             = :old.age,
             deletetime      = sysdate,
             sate             = 'D'            
       where id              = :old.id;
    end if;
    
  --有数据的操作
  else
        --插入
    if inserting then
      update table_b
         set username        = :new.username,
             age             = :new.age,
             createtime      = sysdate,
             sate            = 'I'            
       where id              = :new.id;
       
       --删除
    elsif deleting then
      update table_b
         set username        = :old.username,
             age             = :old.age,
             deletetime      = sysdate,
             sate            = 'D'            
       where id               = :new.id;
       
       --更新
    elsif updating then
      update table_b
         set username        = :new.username,
             age              = :new.age,
             updatetime      = sysdate,
             sate            = 'U'
       where id              = :new.id;
       
    end if;
  end if;
end;
#3
wzla3332008-11-30 01:16
又见只求的帖子。。。。
1