-
-
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.参数说明(必须)
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
复制代码
3.创建存储过程SQLCHECK_TEST2
复制代码
4.创建sql脚本规则,并执行质检方案
执行200802期数据,总数据量为314,E15C2字段为空的数据有291条对应错误数,与库表数据一致。此时SQL脚本存储过程规则已执行完毕。
介绍
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 --固定字段名,需要展示的相关数据信息,没有可以为空。
- <font face="楷体, 楷体_GB2312">CREATE TABLE SQLCHECKTABLE(
- DATACLASS VARCHAR(50),
- CHECKSTATE INTEGER ,
- BUILDID VARCHAR(50), //关键字字段
- BUILDNODEID VARCHAR(50), //关键字字段
- FIELDVALUES VARCHAR(50),
- FIELDVALUEDESC VARCHAR(50)
- );</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.创建模型、设置主题表信息
![](static/image/common/none.gif)
![](static/image/common/none.gif)
2.创建临时表SQLCHECKTABLE2
- <font face="楷体, 楷体_GB2312">CREATE TABLE SQLCHECKTABLE2(
- DATACLASS VARCHAR(50),
- CHECKSTATE INTEGER ,
- SYS_XDATA_ROWID VARCHAR(50),
- FIELDVALUES VARCHAR(50),
- FIELDVALUEDESC VARCHAR(50)
- )
- //以上临时表sql中除了 SYS_XDATA_ROWID是关键字字段外,其余是固定写法</font>
![](static/image/common/none.gif)
3.创建存储过程SQLCHECK_TEST2
- <font face="楷体, 楷体_GB2312">CREATE OR REPLACE PROCEDURE SQLCHECK_TEST2(
- PERIOD IN VARCHAR,
- DATACLASS IN VARCHAR,
- TMPTABLE OUT VARCHAR) AS
- BEGIN
- DELETE SQLCHECKTABLE2;
- COMMIT;
- EXECUTE IMMEDIATE 'INSERT INTO SQLCHECKTABLE2(DATACLASS,CHECKSTATE,SYS_XDATA_ROWID)
- (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||''')';
- COMMIT;
- TMPTABLE := 'SQLCHECKTABLE2';
- END SQLCHECK_TEST2;</font>
![](static/image/common/none.gif)
4.创建sql脚本规则,并执行质检方案
![](static/image/common/none.gif)
![](static/image/common/none.gif)
执行200802期数据,总数据量为314,E15C2字段为空的数据有291条对应错误数,与库表数据一致。此时SQL脚本存储过程规则已执行完毕。