近期完成了一个精益管理项目(提升员工渗透率),主要用于统计各个单位在统计时间段内的业务渗透情况。从下面的日程计划表可以看出是一个持续改进的项目,其中核心支持数据就是本项目所要描述的多个Oracle数据库联合做统计分析,业务语言描述如下,代码也是几经修改,最终用于支撑完成项目。

统计期内有效承保的员工数占该单位员工总数的占比。有效承保是指统计期内有效保单保费累计大于100元的员工数;其中会员含会员及员工亲属,员工数以统计当期公司数据库更新的人数为准。会员是指员工及亲属。

业务语言描述起来很容易理解,但是由于我们所需的数据分布在不同的表中,而这些表又分布在不同的库中,所以其中涉及到连库查询,多表联合查询,创建临时表存放统计分析数据等一些列操作。下面拆开语句来挨个做解析:

一、创建DBLINK

/*跨库查询
create public database link dblinkconnect to totalplant identified by totalplant using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = prd.gdc)))';
--语法解释:
create public database link DBLINK名字(自己随便起)connect to 用户名 identified by 密码using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 要连接的数据库所在服务器的IP地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 要连接的数据库的在本地的服务名(即要连接的数据库的SID))))';
*/
--创建DBLINK
create database link webinsured_link
connect to ****  identified by  ******
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = **.***.*.*)(PORT = 0000)))(CONNECT_DATA =(SERVICE_NAME = *****) ))';

二、创建员工表,实时更新数据

--创建员工表 实时更新数据

CREATE TABLE SU_NWYG_LIST(ID NUMBER(10),NAME VARCHAR2(250),IDENTIFYNUMBER VARCHAR2(350),COM1 VARCHAR2(250),COM2 VARCHAR2(250),COM3 VARCHAR2(250),CHENGBAOINGFLAG NUMBER(6),CHENGBAOOLDFLAG NUMBER(6),CUSTOMER_POSITION VARCHAR2(250),CUSTOMER_TYPE NUMBER(10));
--插入数据   isvalid 1代表是否当前有效,0为已删除; falg i代表insert,u代表update,d代表delete;holdertype 1代表员工,2代表三产,3代表**员工。
insert into SU_NWYG_LIST(ID,NAME,IDENTIFYNUMBER,COM1,COM2,COM3)
select USERCODE,USERNAME ,IDENTIFYNO,CNAMESECOND,CNAMETHIRD,CNAMEFOURTH From nw_holder_info where isvalid = 1 and  holdertype = 1;

三、创建统计表,输出统计分析数据

--创建统计表
create table su_nwyg_sentou as
select IDENTIFYNUMBER,max(SUMPREMIUM) SUMPREMIUM from(
select * from(
select b.IDENTIFYNUMBER IDENTIFYNUMBER, sum(a.SUMPREMIUM) SUMPREMIUM From webpolicy@webinsured_link a
right join webinsured@webinsured_link b on a.policyno = b.policyno
where --a.STARTDATE > trunc(sysdate)
a.STARTDATE >= to_date('20190121','yyyymmdd') and a.STARTDATE <= to_date('20190127','yyyymmdd')
and a.riskcode  in ('1101','1205','1206','2401','6103','6107','6111','6113','2347','2125','2405','6118','6114','6115','6121','6210')
and b.IDENTIFYNUMBER in (select IDENTIFYNUMBER from su_nwyg_list)
and(a.policyno like '8%'
or a.policyno in (
select policyno from SACUSTOMERVISITDATA@webinsured_link where STARTDATE >= to_date('20190121','yyyymmdd')  and STARTDATE <= to_date('20190127','yyyymmdd') and policyno like'2%' and BUSINESSPLATE ='2')
or a.policyno in (
select policyno from SACUSTOMERVISITDATA@webinsured_link where STARTDATE >= to_date('20190121','yyyymmdd')  and STARTDATE <= to_date('20190127','yyyymmdd') and policyno like'2%' and businessclassification='03' and businessclass='03'))
group by b.IDENTIFYNUMBER having sum(a.SUMPREMIUM) >=100
)
union all
select * from(
select identifynumbercus IDENTIFYNUMBER,BISUMAMOUNT SUMPREMIUM from SaCustomerVisitData@webinsured_link
where identifynumbercus is not null
and BUSINESSCLASS in ('04', '31')
and STARTDATE >= to_date('20190121','yyyymmdd') and STARTDATE <= to_date('20190127','yyyymmdd')
and identifynumbercus in (select IDENTIFYNUMBER from su_nwyg_list)
))
group by IDENTIFYNUMBER;
create index su_nwyg_sentou_IDENTIFYNUMBER  on su_nwyg_sentou (IDENTIFYNUMBER);
--更新员工总表中的 渗透标识
--   先将渗透标识置为0 未渗透
update su_nwyg_list set CHENGBAOINGFLAG = 0 ;
--   根据渗透清单,更新标识置为1 渗透
update su_nwyg_list set CHENGBAOINGFLAG = 1  where
IDENTIFYNUMBER in (select IDENTIFYNUMBER from su_nwyg_sentou);
--删除历史一级单位渗透数
delete from su_nwyg_sentou_tongjicom1;
--插入全新一级单位渗透数
insert into su_nwyg_sentou_tongjicom1
select com1 ,count(*) n From su_nwyg_list where CHENGBAOINGFLAG=1 group by com1 order by 1 ;
--删除历史三级单位渗透数
delete from su_nwyg_sentou_tongjicom3;
--插入全新三级单位渗透数
insert into su_nwyg_sentou_tongjicom3
select com1 ,com2,com3 ,count(*) n From su_nwyg_list where CHENGBAOINGFLAG=1 group by com1 ,com2,com3 order by 1,2 ;
drop table su_nwyg_sentou ;
--输入一级、三级渗透数
select * From su_nwyg_sentou_tongjicom3  order by 1,2 ;
--删除员工数据表
drop table su_nwyg_list;

以上,输出结果:

oracle创建dblink语句_多个Oracle数据库联合做统计分析相关推荐

  1. oracle创建dblink语句_一文看懂Oracle12c中多租户(容器)从种子创建PDB

    概述 在容器数据库CDB里面如何创建PDB,官方文档给出了一张创建PDB技术选项图,图片如下: 以下基于Oracle19c演示如何从种子创建PDB. 概述 使用种子(PDB$SEED)创建新的PDB, ...

  2. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

  3. 创建oracle dblink权限不足,oracle 创建dblink

    创建DBlink database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序.在任何分布式环境里,database都是必要的.另外要 ...

  4. 创建dblink语句

    创建dblink语句 例如: create public database link ATOM connect to atomwgq identified by atomwgq using '(DES ...

  5. oracle创建DBLink连接

    1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库.tnsnames.ora文件在你安装oracle客户端安装文件里 如:(E:\oracle\pr ...

  6. oracle创建dblink同义词,Oracle中DBlink与同义词

    Oracle Dblink and synonym(同义词) 一.创建前提 1.具有创建link权限 2.创建同义词权限(synonym) 3.授权命令(在sys用户下) grant CREATE P ...

  7. oracle 创建 dplink,Oracle创建dblink

    DBLINK 创建 dblink(Database Link)数据库链接顾名思义就是数据库的链接 ,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblin ...

  8. oracle创建dblink连接达梦

    oracle(源) 达梦(目标) 作者 ip 192.168.56.41 192.168.56.21 需求 在oralce端创建dblink连接达梦数据库 本次环境为Linux x86, oracle ...

  9. Oracle创建dblink和同义词小记

    这里所需要的信息: 从MM库向GG库建立dblink MM库的用户名密码为 mmn,mmk  GG库的用户名密码为 ggn,ggk 先决条件:MM库有建立dblink的权限,两边主机的可以ping连通 ...

最新文章

  1. 通讯波形记录——I2S、I2C、Uart、SPI
  2. SQL中的join操作总结(非常好)
  3. CentOS 6.3(x86_64)下安装Oracle 10g R2
  4. python如何输出百分比的数字_Python如何输出百分比
  5. 万万没想到,线程居然被饿死了!
  6. spdk-nvmf指南
  7. 工厂模式个人案例_工厂设计模式案例研究
  8. Android App内存优化之图片优化
  9. 【译】数据显示:中国的程序员是世界上最牛的程序员?
  10. android SDK 常见安装方法
  11. Mac OS - 让Myeclipse10支持Retina显示屏
  12. 遇到一个很冷门的bug(java.lang.NoSuchMethodException问题原因及解决办法)
  13. linux pgm格式图片,pgm文件扩展名,pgm文件怎么打开?
  14. vue子元素点击事件与父元素点击事件冲突 子元素点击事件不触发
  15. 2018个人面试记录
  16. 10-Ubuntu-ftp客户端
  17. org.quartz.JobPersistenceException: Couldn‘t store job:
  18. 福利:工作经常用到的Mac软件整理(全)
  19. 20221014 复数、双曲复数、对偶数
  20. 李彦宏说百度吹的牛都实现了,还扔出来一个ACE计划

热门文章

  1. “我的开源项目被大厂‘盗用’了!”
  2. 最良心的Chrome插件可以良心到什么程度?
  3. 官宣,Shane Miller 当选 Rust 基金会首任主席
  4. 如何避免循环中“突兀”的break和continue
  5. 不知风险 何谈 5G?
  6. 握几次手就能拿下 HTTPS
  7. Java变量声明在循环体内还是循环体外,你用哪一个?
  8. 阿里推出“阿里云网盘”App;Linux 发布 29 周年​| 极客头条
  9. 超详细!一文带你了解 LVS 负载均衡集群!
  10. @开发者 争抢技术红利,百度自研 4 款人脸硬件要和大家见面了!