ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 创建物化视图的一个例子

创建物化视图的一个例子

原创 Linux操作系统 作者:eric0435 时间:2012-02-12 12:20:35 0 删除 编辑
创建一个物化视图用来提高查询数据速度,要创建的视图是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');

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-716090/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
系统架构师,ACOUG MEMBER,Oracle ACE,Mail:yongjing.star@gmail.com Mobile:13875984558 QQ:409898894 Blog:www.jydba.net

注册时间:2011-10-12

  • 博文量
    517
  • 访问量
    6116502