为何设计三张基本上相同的表??
这种情况下可以用触发器,但是如果使用频率不是太高的话,
还是做dbms_job包来每天取数据一次,较为节省性能。

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER TABLE0_TRIG
    AFTER INSERT ON TABLE0
    FOR EACH ROW
    DECLARE
    BEGIN
     insert into table1 new.a,new.b,....
     insert into table2 new.a,new.b,....
    END;
      

  2.   

    CREATE OR REPLACE TRIGGER TABLE0_TRIG
    BEFORE INSERT ON TABLE0
    FOR EACH ROW
    DECLARE
    BEGIN
     insert into table1 VALUES( :new.a,:new.b,....);
     insert into table2 VALUES(:new.a,:new.b,....);
    END;
      

  3.   


     insert into table1 VALUES( :new.a,:new.b,....);
     insert into table2 VALUES(:new.a,:new.b,....);还请问这两条语句的解释是什么?多谢啊。
      

  4.   

    before table trigger 在你插入第一张表之前,将需要的数据插入另外两张表,这里用table1和table2表示。
    :new.a是指第一张表的a字段的值,同理,:new.b是b字段的值,你可以根据你的具体情况修改代码。
    例如:你只需要将第一张表的a、b字段的值插入table1表中
    则可写成:insert into table1(a,b) values(:new.a,:new.b);
      

  5.   

    new 和old允许使用在触发器中么?
      

  6.   

    如果你的字段名为column1,则:new.colunm1则表示新增记录前,column1的值
      

  7.   

    caspling(迷糊猫) 在插入前和插入后执行该触发器应该差别不大,对吧?另:我用OEM实现增加触发器
    触发器的主体:
    insert into tablel1(a) values(:new.a)
    insert into tablel2(a) values(:new.a)提示:new 引用不允许在表层触发器中
      

  8.   

    啊,我一直这样用的呀,唯一和你不同的是把触发器脚本文件在pl/sql developer中编译生成罢了,一切正常呀
      

  9.   

    果然是这样啊!
    CREATE OR REPLACE TRIGGER TABLE0_TRIG
    BEFORE INSERT ON TABLE0
    FOR EACH ROW
    DECLARE
    BEGIN
     insert into table1 VALUES( :new.a,:new.b,....);
     insert into table2 VALUES(:new.a,:new.b,....);
    END;
    把上面的语句放在sql*plus中执行没问题
     FOR EACH ROW
    DECLARE是什么意思?因为在OEM中没有写这两行,所以报错!
      

  10.   

    FOR EACH ROW是指对每一条记录都作处理,DECLARE和BEGIN之间可以申明你需要用到的本地变量