我用oracle10g ,
现在有A表,B表,和A1表。  目的是,取A表和B表的一些字段,实时同步给A1表。
我建一个触发器:
create or replace trigger tr_s
  before insert on A
  for each row
begin
     Insert Into A1 (id)values(:New.id);
   End;
/
以上是没问题的。 但是缺少了几个字段,所以我考虑做成视图V,创建一个触发器如下
create or replace trigger tr_GIFTREDEEMHIS_ins
instead of  insert on V
  for each row
begin
     Insert Into A1 (id)values(:New.id);
   End;
/
以上这么做,就不可行。
请教大家,是否可以允许用视图,怎么用?谢谢

解决方案 »

  1.   

    在视图是可以建立触发器的。
    但需要使用instead of insert on 视图
    具体操作基表,没有问题的。
      

  2.   

    把视图V的数据同步到A1表里。。  触发器里使用A表的话是没问题的。使用视图数据就过不去。是不是逻辑上出问题了。
      

  3.   


    我本意就是通过视图把数据同步到表的。 插入的数据是插入到A表里。A表和B表,建的视图嘛
      

  4.   

    你的视图是通过插入A表后,视图的数据发生变化的,但是并不是插入视图的操作,这个要分清楚,虽然视图中的数据都会改变,但是操作并不一样,所以触发器不行是可以理解的啊另外视图触发器的概念应该是这么理解的吧:
    创建在视图上的触发器就是替代触发器,只能是行级触发器
    为什么说是替代触发器?因为我们实际上对视图并不能进行直接的插入操作,但是我们可以通过触发器来把对视图的插入操作替换成对组成视图的各个表的插入操作,这就是为什么叫替代触发器!总上,你的要求是不合理的,所以实现不了。
    下面的解决方案,你可以考虑下:
    1,对视图直接进行插入操作,把需要插入A表的数据和B表关联的数据直接插入视图,然后通过替代触发器来实现对A表的插入和对A1表的插入。
    2,仍然在你的A表中建立触发器,触发的同时把你B表中相关的数据查出来,一块插入到A1表中应该也可以吧?
      

  5.   

    楼主不就是用的你说的第一个办法在解决问题么
    难道莫非楼主你tr_s 和tr_GIFTREDEEMHIS_ins这2个触发器同时在用。。只用tr_GIFTREDEEMHIS_ins  真不知道还有什么问题啊