创建物化视图 报错 ora-12060:预建表的形式与定义查询不匹配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wrh_csdn/article/details/87369458

如果以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
  );

猜你喜欢

转载自blog.csdn.net/wrh_csdn/article/details/87369458