博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记录一条纠结了SQL语句
阅读量:5223 次
发布时间:2019-06-14

本文共 1657 字,大约阅读时间需要 5 分钟。

在使用BAM监控SOA接口实例运行情况时,需要设计一个视图整合SOA实例信息,包括实例ID,创建时间,完成时间,还有实例状态等信息。

SOA中分别有三张比较重要的表保存实例信息:

COMPOSITE_INSTANCE:记录实例基本信息,包括ID,状态,创建时间,但没有完成时间,比较麻烦的是SOA状态监控需在Oracle EM里面开启,否则对于已完成的实例一律标记为状态32,也就是Unknow状态。系统出于性能的考虑默认是关闭的,而且客户一般也不允许开启,这就给状态监控带来问题,因此需要以下两张表的支持,这里为了讲解方便假设假设表只存在ID,STATE两个字段。

CUBE_INSTANCE:记录BPEL流程信息,包括该BPEL创建时间和结束时间,由于一次SOA接口的调用,大部分时间是花在BPEL的执行,因此BPEL执行时间可以近似看做SOA接口的运行时间。CUBE_INSTANCE通过字段CMPST_ID和COMPOSITE_INSTANCE相关联,而且COMPOSITE_INSTANCE和CUBE_INSTANCE的关系是一对多的关系。为了讲解方便假设CUBE_INSTANCE表只存在CMPST_ID,CIKEY,RUNTIME三个字段。

WI_FAULT:记录BPEL错误信息,如果SOA接口的BPEL流程执行出现问题,系统会将错误信息记录在该表中,也就是说,在该表中出现的BPEL流程对应的SOA实例一定是错误的调用,可以通过查询该表判断实例是否出错。WI_FAULT通过CIKEY字段与CUBE_INSTANCE相关联,为了讲解方便假设WI_FAULT只有CIKEY字段。

现在整理一下思路,表COMPOSITE_INSTANCE的ID字段和CUBE_INSTANCE的CMPST_ID字段相关联,关系为1对多,CUBE_INSTANCE和WI_FAULT通过CIKEY字段相关联,关系为1对1。

视图除了获取实例的一些基本信息最重要的是判断实例的BPEL流程是否有错误,如果有错误将状态STATE修改成80如果没有错误就保留原状态,以这种方式来判断实例的状态。下面这个Oracle SQL语句是经过多次修改后的版本,由于SQL和ORACLE都入门尚浅因此在该SQL上花了不少功夫。

CREATE OR REPLACE VIEW INSTANCE_REPORT_V AS  FROM (SELECT A.ID CMPST_ID, DECODE(C.ERROR_ID, NULL, A.STATE, 80) STATE          FROM COMPOSITE_INSTANCE A,               (SELECT BB.CMPST_ID CMPST_ID, MAX(BB.RUNTIME) RUNTIME                  FROM CUBE_INSTANCE BB                 GROUP BY BB.CMPST_ID) B,               (SELECT DISTINCT CUBE.CMPST_ID ERROR_ID                  FROM CUBE_INSTANCE CUBE, WI_FAULT WI                 WHERE CUBE.CIKEY = WI.CIKEY) C         WHERE A.ID = B.CMPST_ID(+)           AND A.ID = C.ERROR_ID(+);

基本思路是先select出错误实例ID,也就是表C,再select出用时最长的BPEL流程,也就是表B,最后将信息整合,注意表C的distinct如果没有表C可能会出现多个相同的实例ID,最后的结果数会多于表COMPOSITE_INSTANCE记录数。

转载于:https://www.cnblogs.com/weisuoc/p/3369795.html

你可能感兴趣的文章
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
关于Matchvs一些使用心得与建议
查看>>
Gson获取json串中的key-value
查看>>
创建spring boot项目
查看>>
Behave + Selenium(Python) 四
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>
例1-1
查看>>
马达调速器,直流马达调速器,直流调速器
查看>>
前端编码规范小记
查看>>
C#编程(二十五)----------接口
查看>>
c如何弹出保存路径/保存文件对话框
查看>>
HTML标签二
查看>>
Python 3语法小记(九) 异常 Exception
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>