表a:id,name,owner,date
表b:id,name,owner,date,last_checkdate
求存储过程,要求当向表a中插入数据时,可以将插入表a中的数据相同字段的复制到表b中
 兄弟们,我是求存储过程!!! 在线等

解决方案 »

  1.   


    --用trigger实现吧
    CREATE OR REPLACE TRIGGER trg_a
    BEFORE INSERT ON a
    FOR EACH ROW
    BEGIN
         INSERT INTO b VALUES(:NEW.id,:NEW.NAME,:NEW.DATE,sysdate);
    END;
      

  2.   

    存储过程实现,没trigger好做,因为你insert是在外面做,不是在procedure中insert ,不然要传参数,很麻烦
    --用trigger实现吧,上面少写了个ownerCREATE OR REPLACE TRIGGER trg_a
    BEFORE INSERT ON a
    FOR EACH ROW
    BEGIN
         INSERT INTO b VALUES(:NEW.id,:NEW.NAME,:NEW.owner,:NEW.DATE,sysdate);
    END;
      

  3.   


    啊啊啊啊啊啊,我就知道会有人要用trriger做的,用trriger的话我也知道容易多了,但是上头要求我用存储过程啊555跪求兄弟们帮帮忙了。
      

  4.   

    什么叫用存储过程?是插入数据以后都不用insert直接用存储过程调用插入,在存储过程里插入a的同时也插入b么?
      

  5.   

    问题是你insert语句是在存储过程中插入吗,还是普通的insert语句
    如果是在过程中执行insert 那么就好办了撒
    如果只是执行insert,要想得到你的要求,那么没办法了,只能创建一个trigger,然后再trigger中调用存储过程,在过程中执行insert into b ...
    也就是说不管怎么样,你要创建一个trigger,不然你新插入的数据怎么作参数传到过程中?
      

  6.   

    用存储过程可以实现目标 但是不能时时插入的 可以加个作业每分钟执行
    要么触发器则
    --过程
    create or replace procedure p1
    as
    begin
    merge into b using a on(a.id=b.id)
    when not matched then
    insert(b.id,b.name,b.owner,b.date) values(a.id,a.name,a.owner,a.date);
    commit;
    end;
      

  7.   

    还是trigger最简单,为什么不建议下你们头用trigger.
      

  8.   


    补充一下我的数据库是oracle8i的
      

  9.   



    版本低了
    --过程
    create or replace procedure p1
    as
    begin
    insert into b select a.id,a.name,a.owner,a.date from a minus select b.id,b.name,b.owner,b.date from b;
    commit;
    end;
    --insert into b select a.id,a.name,a.owner,a.date from a minus select b.id,b.name,b.owner,b.date from b;
    --or
    insert into b select a.id,a.name,a.owner,a.date from a 
    where not exists(select 1 from b where a.id=b.id);