我的环境是oracle10g,想将几个基础表联立建一个视图,当视图中有新写入的数据时,就执行触发器,将新写入的数据导入到另一个用户的表中,可行吗
如果不行,用什么方法可以达到这样的效果,
谢谢大家了!

解决方案 »

  1.   

    我的代码如下:
    create or replace trigger TRI_SEND
      after insert on V_SEND  
      for each row
    begin
      INSERT INTO OUTBOX (
        EXPRESSLEVEL, 
        SENDER, 
        RECEIVERMOBILENO, 
        MSG, 
        SENDTIME, 
        NEEDREPORT,      
        ISCHINESE) 
    VALUES ( 
           1 ,
           'test' ,
            :new.RECEIVERCODE, 
            :new CONTENT, 
            :new SENDTIME,
           1, 
           1        
           );
    end TRI_SEND;但编译报错:无法在视图上创建此类型的触发器why
      

  2.   

    回复icefirelxb:为什么不在相关表上建呢?主要是我有两个基础表,两个表之间是一对多的关系。
    需要通过触发器来写入数据的表,是对这两个基础表内容的合并。
      

  3.   

    视图上建的触发器是instead触发器。
      

  4.   

    after 改成 instead of
      

  5.   

    噢,我的书上是这么写的:/*
    在Oracle系统里,如果一个视图是由一个基表的所有非空列(Not Null)组成,那么该视图是可以进行INSERT、DELETE和UPDATE操作的。但是如果一个视图由多个基表进行连接(Join)而成,则该视图不允许进行INSERT、DELETE和UPDATE操作的。而Oracle提供的替代触发器(Instead of Trigger)就是用于对连接视图进行Insert、Delete、Update操作的触发器。也就是说,通过编写替代触发器,可以对连接视图进行DML操作,从而实现对各基表数据的修改。
    */不打字了,思路就是这样子了。qfkx.com友情技术支持。
      

  6.   

    用INSERD OF 触发器
    CREATE [OR REPLACE] TRIGGTER XXX_VIEW
    INSEAD OF XXX[TABLENAME]
    FOR EACH ROW
    BEGIN
    [你要执行的SQL语句,既然你是2个基表的话,你就要对2个基表分别操作]
    END