Oracle数据库查询结果封装到表中

Oracle数据库查询结果封装到表中

场景:有一个视图,执行查询时间特别长(大概有5分多),每次查询视图,就要每次都执行5分钟以上才会查出结果。
解决办法,将一次的查询结果封装到数据库的表中,这样,每次查询表就可以了,查询表的速度很快(只需要0.9秒左右)。
sql语句写法:

原视图语句:

--视图的封装语句为(不用看细节,就知道很复杂,所以执行时间很长就好了)
create or replace view qz_yxhmdj_view_last as
select distinct a."TASKID",a."F_SQBM",a."REQUSER",a."F_SQR_TEL",a."REQDATE",a."F_GDH",a."F_SQDATE",a."F_FJ",a."F_YWLX",a."F_SQHM",a."F_HMDJ",a."F_BZYJED",
a."F_BZYBDED",a."F_BZBDQX",a."F_SFJD",a."F_REMARK",a."F_SHQDBH",a."F_BYYHSQL",a."F_SQYJED",a."F_SQBDXF",a."F_SQBDQX",a."F_DC",a."F_JDSL",
a."F_DJDC",a."F_SQYJFCQX",a."F_FGS",a."F_SQL",a."F_SLZZ",a."FUJIAN",a."F_KHMC",a."F_KHZJH",a."F_KHLX",a."F_GSQY",a."F_SFTSHD",
a."F_SFTSHD2",c.fromusername curusername,
(case when ( a.taskid in (select  taskid from bpmi_token where taskid=a.taskid and result like '%废%') )
then '工单已作废'  else '' end) as state,b.tokenname
from qz_yxhmdj a,
     (select * from bpmi_tokenlast where tokenstatus != 5 and tokenstatus != 6 and (TokenStatus != 0 or ElementType != 0)) b,
     (select * from bpmi_token where tokenname = '申请人确认') c
where a.taskid = b.taskid(+)
and a.taskid = c.taskid(+)
and a.taskid in (select taskid from bpmi_token where tokenname = '申请人确认')
union
select a."TASKID",a."F_SQBM",a."REQUSER",a."F_SQR_TEL",a."REQDATE",a."F_GDH",a."F_SQDATE",a."F_FJ",a."F_YWLX",a."F_SQHM",a."F_HMDJ",a."F_BZYJED",
a."F_BZYBDED",a."F_BZBDQX",a."F_SFJD",a."F_REMARK",a."F_SHQDBH",a."F_BYYHSQL",a."F_SQYJED",a."F_SQBDXF",a."F_SQBDQX",a."F_DC",a."F_JDSL",
a."F_DJDC",a."F_SQYJFCQX",a."F_FGS",a."F_SQL",a."F_SLZZ",a."FUJIAN",a."F_KHMC",a."F_KHZJH",a."F_KHLX",a."F_GSQY",a."F_SFTSHD",
a."F_SFTSHD2",case when tokenname = '结束' then fromusername else  curusername end curusername,
(case when ( a.taskid in (select  taskid from bpmi_token where taskid=a.taskid and result like '%废%') )
then '工单已作废'  else '' end) as state,tokenname
from (select * from qz_yxhmdj where taskid not in (select taskid from bpmi_token where tokenname = '申请人确认')) a inner join  bpmi_tokenlast b on a.taskid=b.taskid
and b.tokenstatus != 5 and b.tokenstatus != 6 and (b.TokenStatus != 0 or b.ElementType != 0);

封装到表的方法

create table qz_yxhmdj_2016 as 
select * from qz_yxhmdj_view_last;

这样就可以通过查询表,取出想要的数据。

优缺点
优点
多次查询结果快。
缺点
只适用于查询不会有改动的数据。
解释
如果我查实时数据,那就只能用视图(表中数据不会根据业务表的新增而动态新增)。
而我要查询历史数据(比如2016年数据),可以用表。此时2016年的数据不会再增加或减少,也不会改变。就不用担心数据的不准确。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值