如果以PREBUILD方式建立物化视图,除非指定了WITH REDUCED PRECISION语句(在on prebuilt table后面加上with reduced precision就可以了),否则列的精度必须满足SELECT表达式的精度;
--1.在ods用户下创建表,删表空间,主键,添加lastmodifydate 默认系统时间,注释
create table FPGL_FPXX
(
id VARCHAR2(32) not null,
fplx VARCHAR2(3),
sksbbh VARCHAR2(32),
kpzdbs VARCHAR2(32),
fpdm VARCHAR2(12),
fphm VARCHAR2(8),
skm VARCHAR2(200 CHAR),
jym VARCHAR2(22),
ewm VARCHAR2(4000),
kprq DATE,
ghdwmc VARCHAR2(100 CHAR),
ghdwsh VARCHAR2(20),
ghdwdzdh VARCHAR2(100 CHAR),
ghdwyhzh VARCHAR2(100 CHAR),
hjje NUMBER(12,2),
hjse NUMBER(12,2),
jshj NUMBER(12,2),
xsdwmc VARCHAR2(100 CHAR),
xsdwsh VARCHAR2(20),
xsdwdzdh VARCHAR2(100 CHAR),
xsdwyhzh VARCHAR2(100 CHAR),
skr VARCHAR2(16 CHAR),
bz VARCHAR2(400 CHAR),
fhr VARCHAR2(16 CHAR),
kpr VARCHAR2(16 CHAR),
zfsbz CHAR(1),
dybz CHAR(1),
qdbz CHAR(1),
kpbz CHAR(1),
zfbz CHAR(1),
djly CHAR(1),
djid VARCHAR2(32),
operate_user VARCHAR2(32),
operate_time DATE,
delete_tag CHAR(1) default 'N',
enabled CHAR(1) default 'Y',
org_id VARCHAR2(32),
tenant_id VARCHAR2(32),
gfzjlx VARCHAR2(3),
gfzjh VARCHAR2(60),
gfyx VARCHAR2(200),
gfsjh VARCHAR2(100),
gfxm VARCHAR2(100),
yfpdm VARCHAR2(12),
yfphm VARCHAR2(8),
zsfs CHAR(1),
kce NUMBER(12,2),
fpzt CHAR(1),
pch VARCHAR2(80),
lastmodifydate date default sysdate
) tablespace ODS_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
comment on column FPGL_FPXX.lastmodifydate
is '最后更新日期';
--2.在ods用户下改表名
ALTER TABLE FPGL_FPXX RENAME to HX_FPGL_FPXX;
--3.在ods用户下创建物化视图(如果不加with reduced precision,就会报错误:ora-12060:预建表的形式与定义查询不匹配,但是有时候不加也不报错,那是因为建表的时候没有指定类似于这样的精度(VARCHAR2(16 CHAR)))
CREATE MATERIALIZED VIEW HX_FPGL_FPXX ON PREBUILT TABLE with reduced precision REFRESH force ON DEMAND with primary key AS
SELECT
id ,
fplx ,
sksbbh ,
kpzdbs ,
fpdm ,
fphm ,
skm ,
jym ,
ewm ,
kprq ,
ghdwmc ,
ghdwsh ,
ghdwdzdh ,
ghdwyhzh ,
hjje ,
hjse ,
jshj ,
xsdwmc ,
xsdwsh ,
xsdwdzdh ,
xsdwyhzh ,
skr ,
bz ,
fhr ,
kpr ,
zfsbz ,
dybz ,
qdbz ,
kpbz ,
zfbz ,
djly ,
djid ,
operate_user ,
operate_time ,
delete_tag ,
enabled ,
org_id ,
tenant_id ,
gfzjlx ,
gfzjh ,
gfyx ,
gfsjh ,
gfxm ,
yfpdm ,
yfphm ,
zsfs ,
kce ,
fpzt ,
pch
FROM HX_KPXT.FPGL_FPXX@TODHSK;
--4.在ods触发器
CREATE OR REPLACE TRIGGER TG_HX_FPGL_FPXX
---进行更新操作时候
BEFORE UPDATE ON HX_FPGL_FPXX
---任何一行
FOR EACH ROW
BEGIN
----将修改时间插入datadate中
:NEW.LastModifyDate := SYSDATE;
END;
--5.全量刷新物化视图(C是全量,F是增量)
call dbms_mview.refresh('HX_FPGL_FPXX','C');
--6.创建主键,表空间
alter table HX_FPGL_FPXX
add constraint PK_HX_FPGL_FPXX primary key (ID)
using index
tablespace ODS_IDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
pctincrease 0
);