创建一个物化视图用来提高查询数据速度,要创建的视图是sj_jf_zgyb_dw,和sj_jf_zgyb_dw表,这里使用的是将视图sj_jf_zgyb_dw查询出来的数据存储在相应的sj_jf_zgyb_dw表中来减少以后查询相同的数据不用再从视图中获取而提高速度.
— Create table
create table SJ_JF_ZGYB_DW
(
XZDM VARCHAR2(64),
XZQHDM VARCHAR2(6),
TCQDM VARCHAR2(6),
DWBH VARCHAR2(64),
FKSSQ VARCHAR2(6),
FKSSQ_DY VARCHAR2(6),
DZRQ_DW VARCHAR2(8),
ZJFS VARCHAR2(2),
JFLX VARCHAR2(1),
JFJE_DW_YJ NUMBER(38,6),
JFJE_DW_SJ NUMBER(38,6),
JFJE_DWHGR NUMBER(38,6),
JFJS_DW NUMBER(38,6),
JFBL_DW NUMBER(38,6),
JFRS_YJ NUMBER(38,6),
JFRS_SJ NUMBER(38,6),
DZBZ_DW VARCHAR2(1)
)
tablespace HYGEIA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column SJ_JF_ZGYB_DW.XZDM
is '险种名称 该项填“城镇职工基本医疗保险” ';
comment on column SJ_JF_ZGYB_DW.XZQHDM
is '行政区划代码 指社保机构所在地的行政区划代码,参照GB/T2260-2007中华人民共和国行政区划代码填列。 ';
comment on column SJ_JF_ZGYB_DW.TCQDM
is '统筹区代码 指此险种的统筹区,填列所属统筹区的行政区划代码。 ';
comment on column SJ_JF_ZGYB_DW.DWBH
is '单位编号 指系统内单位的唯一标识 ';
comment on column SJ_JF_ZGYB_DW.FKSSQ
is '费款所属期 指核定用人单位或个人社会保险费时的年月,表示方式为YYYYMM ';
comment on column SJ_JF_ZGYB_DW.FKSSQ_DY
is '对应费款所属期 指核定的社会保险费应收取年月或社会保险待遇应付出年月,表示方式为YYYYMM当对应费款所属期小于费款所属期时,为补收或补发;当对应费款所属期等于费款所属期时,为正常缴费/待遇;当对应费款所属期大于费款所属期时,为趸缴或预支付 ';
comment on column SJ_JF_ZGYB_DW.DZRQ_DW
is '单位到帐日期 指社保机构实际收到社会保险费时的日期,通常采用自然日期,表示方式为YYYYMMDD。当原始数据仅能精确到月份,而无法确定到“日”时,统一设为当月第一天。 ';
comment on column SJ_JF_ZGYB_DW.ZJFS
is '征缴方式 指社保机构收取社会保险费的方式,按下列代码填列:1-银行托收,2-税务代征/税务全责征收,3-经办机构自收,4-学校代收,5-社区代收 ,99-其他 ';
comment on column SJ_JF_ZGYB_DW.JFLX
is '缴费类型 按下列代码填列:1-正常,2-补缴,3-退费,4-预交,5-缓缴 ';
comment on column SJ_JF_ZGYB_DW.JFJE_DW_YJ
is '单位应缴金额 指用人单位应缴纳的社会保险费金额。不可为空,可填0 ';
comment on column SJ_JF_ZGYB_DW.JFJE_DW_SJ
is '单位实缴金额 指用人单位实际缴纳的社会保险费金额。不可为空,可填0 ';
comment on column SJ_JF_ZGYB_DW.JFJE_DWHGR
is '单位金额划个人账户金额 指从用人单位实际缴纳的社会保险费中划转记入个人账户的金额。不可为空,可填0 ';
comment on column SJ_JF_ZGYB_DW.JFJS_DW
is '单位缴费基数 指单位缴纳社会保险费的基数。不可为空,可填0 ';
comment on column SJ_JF_ZGYB_DW.JFBL_DW
is '单位缴费比例 指用人单位缴纳保险费的比例。比例以小数方式表示,如“0.20” ';
comment on column SJ_JF_ZGYB_DW.JFRS_YJ
is '应缴人数 指用人单位当月应缴纳社会保险费人数。不可为空,可填0 ';
comment on column SJ_JF_ZGYB_DW.JFRS_SJ
is '实缴人数 指用人单位当月实际缴纳社会保险费人数。不可为空,可填0 ';
comment on column SJ_JF_ZGYB_DW.DZBZ_DW
is '单位到账标志 按下列代码填列:1-已到账,0-未到账 ';
create materialized view SJ_JF_ZGYB_DW
on prebuilt table
WITH REDUCED PRECISION--当与视图相应的表中的字段长度不匹配时减少精度
refresh force on demand
enable query rewrite
as
select '城镇职工基本医疗保险' as XZDM,
lt.center_id as XZQHDM,
substr(lt.center_id,0,4) as TCQDM,
to_char(lt.corp_id) as DWBH,
lt.calc_prd as FKSSQ,
to_char(lt.to_pay_date, 'yyyymm') as FKSSQ_DY,
to_char(lt.fac_pay_date, 'yyyymmdd') as DZRQ_DW,
'1' as ZJFS,
to_char(lt.topay_type) as JFLX,
sum(decode(pm.indi_flag, 1, lc.pay_money, 0)) as JFJE_DW_YJ,
sum(decode(lt.payed_flag,
1,
decode(pm.indi_flag, 1, lc.pay_money, 0),
0)) as JFJE_DW_SJ,
Sum(decode(pm.money_id, 5, lc.pay_money, 0)) as JFJE_DWHGR,
sum(decode(lc.money_id, 4, abs(sign(lc.pay_money) * lc.calc_base), 0)) as JFJS_DW,
0.07 as JFBL_DW,
sum(decode(lc.money_id, 4, lc.calc_man_sum, 0)) as JFRS_YJ,
sum(decode(lc.money_id, 4, lc.calc_man_sum, 0)) as JFRS_SJ,
decode(lt.payed_flag, 1, '1', '0') as DZBZ_DW
From lv_insr_topay lt,
lv_cropfundpar lc,
pfs_money_info pm
Where lt.pay_info_no = lc.pay_info_no
And pm.money_id = lc.money_id
And lt.insr_detail_code = 2
And lt.src_type = 1
/* And lt.center_id=430701
And lt.calc_prd between '201201' and '201202'*/
group by lt.center_id,
lt.corp_id,
lt.calc_prd,
to_char(lt.to_pay_date, 'yyyymm'),
to_char(lt.fac_pay_date, 'yyyymmdd'),
to_char(lt.topay_type),
decode(lt.payed_flag, 1, '1', '0');
这里是手工刷新数据,因为有上十亿的数,查询的是十几年的医保缴费数据
call dbms_mview.refresh('SJ_JF_ZGYB_DW');