质检规则SQL脚本示例

399
0

chestnut 数据领袖Lv6

发表于2023-5-9 18:25

楼主
本帖最后由 chestnut 于 2023-5-9 18:25 编辑

介绍
sql脚本检查是通过执行存储过程检查主题表数据是否满足要求。定义sql脚本检查前,需要在对应的数据库连接池内自定义存储过程。规则执行时系统调用存储过程,传递数据期,数据级次相关参数,由存储过程返回临时表。

计算逻辑
使用sql脚本规则,需要提前创建一张临时表(有字段要求),根据需求创建好存储过程,在存储过程中先delete临时表数据,再写自定义判断,将判断结果insert到临时表。外面把临时表表名传给程序,产品再从临时表里面读取数据,塞到质检结果表中。

创建临时表
临时表字段信息(必须创建字段):
表名: 自定义,这里取名SQLCHECKTABLE;
创建位置:检查主题表所在数据库。

DATACLASS --固定字段名,数据级次,此字段存放数据级次值
KEY1,KEY2,KEY3 --定义此规则的主题表设置的关键字段,字段名为在主题表上定义的关键字的别名,关键字段有几个,就需要定义几列,比如关键字为BUILDID,BUILDNODEID,那么需要增加两列BUILDID,BUILDNODEID
CHECKSTATE --固定字段名,数据是否通过,通过为1,未通过为0
FIELDVALUES --固定字段名,需要展示的相关数据信息,没有可以为空。值如:C1=0;C2=3;C3=5,多个值组成的字符串中间使用英文分号隔开
FIELDVALUEDESC --固定字段名,需要展示的相关数据信息,没有可以为空。
  1. <font face="楷体, 楷体_GB2312">CREATE TABLE SQLCHECKTABLE(
  2.        DATACLASS VARCHAR(50),
  3.        CHECKSTATE INTEGER ,
  4.        BUILDID VARCHAR(50), //关键字字段
  5.        BUILDNODEID VARCHAR(50), //关键字字段
  6.        FIELDVALUES VARCHAR(50),
  7.        FIELDVALUEDESC VARCHAR(50)
  8. );</font>
复制代码

创建存储过程
注:存储过程是要跟检查的表建在同一个库里面的。

1.参数说明(必须)
period in varchar  输入参数,报表期;
dataclass in varchar  输入参数,数据级次;
tmptable out varchar   输出参数,临时表名;

2.主要说明
创建位置:检查主题表所在数据库
将数据加以自定义判断错误后,将数据插入临时表SQLCHECKTABLE

3.报表期过滤说明
如果所检查主题表设置了报表期,则需要在检查的表上加上过滤条件,主题表没设置报表期就不能加报表期过滤条件,虽然执行的时候选了报表期,但是不知道那个是报表期字段。

这个过滤条件要根据检查主题表的报表期字段来写的,例:
报表期字段是bbq_,则过滤条件为bbq ='''||period||''' ;  
报表期字段是left(bbq_,4), 则过滤条件为 substr(bbq_,1,4) = '''||period||''';

以单表有数据期、数据级次情况,存储过程示例
检查库是oracle;
检查的表 :F_XXB3_COPY,关键字字段SYS_XDATA_ROWID,数据期字段BBQC11(月),数据级次字段UPIDC18;
1.创建模型、设置主题表信息

2.创建临时表SQLCHECKTABLE2
  1. <font face="楷体, 楷体_GB2312">CREATE TABLE SQLCHECKTABLE2(
  2. DATACLASS VARCHAR(50),
  3. CHECKSTATE INTEGER ,
  4. SYS_XDATA_ROWID VARCHAR(50),
  5. FIELDVALUES VARCHAR(50),
  6. FIELDVALUEDESC VARCHAR(50)
  7. )

  8. //以上临时表sql中除了 SYS_XDATA_ROWID是关键字字段外,其余是固定写法</font>
复制代码

3.创建存储过程SQLCHECK_TEST2
  1. <font face="楷体, 楷体_GB2312">CREATE OR REPLACE PROCEDURE SQLCHECK_TEST2(
  2. PERIOD IN VARCHAR,
  3. DATACLASS IN VARCHAR,
  4. TMPTABLE OUT VARCHAR) AS
  5. BEGIN
  6. DELETE SQLCHECKTABLE2;
  7. COMMIT;
  8. EXECUTE IMMEDIATE 'INSERT INTO SQLCHECKTABLE2(DATACLASS,CHECKSTATE,SYS_XDATA_ROWID)
  9. (SELECT UPIDC18 AS DATACLASS, (CASE WHEN A.E15C2 is null THEN 0 ELSE 1 END) AS CHECKSTATE,A.SYS_XDATA_ROWID FROM F_XXB3_COPY A WHERE A.BBQC11 ='''||PERIOD||''')';
  10. COMMIT;
  11. TMPTABLE := 'SQLCHECKTABLE2';
  12. END SQLCHECK_TEST2;</font>
复制代码

4.创建sql脚本规则,并执行质检方案


执行200802期数据,总数据量为314,E15C2字段为空的数据有291条对应错误数,与库表数据一致。此时SQL脚本存储过程规则已执行完毕。


最近看过此主题的会员

lingzed

0个回答

只看楼主

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号