有两张表A,B结构完全相同,表栏位太多只列举几个.
create table A
(
  u_id number ,
  u_name varchar2(20),
  u_age number,
  u_DATE DATE
)
 u_id,u_DATE 是联合主键.
表A有一个trigger
create or replace trigger t_mlog_A
  before insert
  on mlog$_A
  for each rowbegin
    if :new.dmltype$$ = 'D'
    then
      :new.snaptime$$ := '';
    end if;
  end t_mlog_A;
现在每隔五分钟把表A的数据刷新到表B中.1创建MV
 CREATE MATERIALIZED VIEW B
                 ON PREBUILT TABLE WITH REDUCED PRECISION
                 REFRESH FAST ON DEMAND
                 WITH PRIMARY KEY
                 FOR UPDATE
                 AS
                 SELECT * FROM A;
2 创建job  部分参数省略
 BEGIN
    DBMS_SCHEDULER.CREATE_JOB(job_name      => 'JOB_' || B,
                              schedule_name => schedule_name,
                              job_type      => 'PLSQL_BLOCK',
                              job_action    => 'BEGIN DBMS_SNAPSHOT.REFRESH(LIST => ''' ||
                                               A || '''); END;');
    DBMS_SCHEDULER.ENABLE(name => 'JOB_' || table_name);
end;问题:
 
     inset into A table values(1,'A',1);
     inset into A table values(2,'B',2);
     inset into A table values(3,'C',3);
1因为job 是每五分钟刷新一次,由于更新了主键.由于找不到主键表B中的数据
     假设第一次是在10:35执行没有手动更改数据表A的数据全部刷到表B
     B 表
        1 A 1  2010-05-18 10:30
        2 B 2  2010-05-18 10:30
        3 C 3  2010-05-18 10:30
     第二次是在10:40执行,在执行前更改主键
    --u_name是唯一的.
     updae A SET  U_ID=4,u_date=sysdate WHERE U_NAME='A';
     由于trigger原因
     表B中并没有更新u_id为1。
     而是插入了一笔新的值
        u_id   u_name  u_age           u_date
         1       A      1        2010-05-18 10:30
         2       B      2        2010-05-18 10:30
         3       C      3        2010-05-18 10:30
         4       A      1        2010-05-18 10:38  
  而本意是想更新 1       A      1        2010-05-18 10:30 数据.请问各位大侠怎么结果.