有两张表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 数据.请问各位大侠怎么结果.
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 数据.请问各位大侠怎么结果.
下面的语法在远程数据库表emp上创建Rowid物化视图
CREATE MATERIALIZED VIEW mv_emp_rowid
REFRESH WITH ROWID
AS SELECT * FROM emp@remote_db;
Materialized view log created.