/* Formatted on 2020/12/08 17:46:58 (QP5 v5.326) */ DECLARE CURSOR c_rmb_onhandnum_withnocode IS SELECT * FROM rmb_onhandnum WHERE (nonhandnum > 0) AND (NVL (dr, 0) = 0) AND (vbatchcode IS NULL); CURSOR c_rmb_onhandnum_withcode IS SELECT * FROM rmb_onhandnum WHERE (nonhandnum > 0) AND (NVL (dr, 0) = 0) AND (vbatchcode IS NOT NULL); TYPE productinfo IS RECORD ( invclassname VARCHAR2 (240), invcode VARCHAR2 (40), invname VARCHAR2 (200), measname VARCHAR2 (200), num NUMBER (20, 8), storname VARCHAR2 (200) ); v_product productinfo; v_product1 productinfo; v_product2 productinfo; v_product3 productinfo; num INT := 0; i INT := 0; j INT := 0; diffvalue INT := 0; startDate CHAR (30) := '2020-12-31'; endDate CHAR (30) := '2022-12-31'; v_ic_onhandnum ic_onhandnum%ROWTYPE; v_ic_onhandnum_pk_corp ic_onhandnum.pk_corp%TYPE; v_ic_onhandnum_nonhandnum IC_ONHANDNUM.NONHANDNUM%TYPE; v_rmb_onhandnum rmb_onhandnum%ROWTYPE; v_rmb_onhandnum_nonhandnum rmb_onhandnum.nonhandnum%TYPE; v_rmb_onhandnum_cinvmanid rmb_onhandnum.cinvmanid%TYPE; v_rmb_onhandnum_cwhid rmb_onhandnum.cwhid%TYPE; v_rmb_onhandnum_cinvbasid rmb_onhandnum.cinvbasid%TYPE; v_rmb_onhandnum_vbatchcode rmb_onhandnum.vbatchcode%TYPE; BEGIN SELECT TO_CHAR (SYSDATE, 'yyyy-mm-dd hh:mm:ss') INTO endDate FROM DUAL; DBMS_OUTPUT.put_line ( '以店存量提取数据验证现存量,检查开始时间--无批次号检验:' || endDate); DBMS_OUTPUT.put_line ('==============================================='); DBMS_OUTPUT.put_line ( '===========以下查询无批次号现存/店存数据==========='); DBMS_OUTPUT.put_line ('==============================================='); IF NOT c_rmb_onhandnum_withnocode%ISOPEN THEN OPEN c_rmb_onhandnum_withnocode; END IF; NULL; LOOP FETCH c_rmb_onhandnum_withnocode INTO v_rmb_onhandnum; EXIT WHEN c_rmb_onhandnum_withnocode%NOTFOUND; v_rmb_onhandnum_nonhandnum := v_rmb_onhandnum.nonhandnum; IF (v_rmb_onhandnum_nonhandnum > 0) --如果有店存量,就检查对应的现存是否有数据,而且数量是否一致!!! THEN v_rmb_onhandnum_cinvmanid := v_rmb_onhandnum.cinvmanid; v_rmb_onhandnum_cwhid := v_rmb_onhandnum.cwhid; v_rmb_onhandnum_cinvbasid := v_rmb_onhandnum.cinvbasid; v_rmb_onhandnum_vbatchcode := v_rmb_onhandnum.vbatchcode; IF (v_rmb_onhandnum_vbatchcode IS NULL) THEN --如果批次号为空,检查有无对 应数量 SELECT COUNT (*) INTO num FROM ic_onhandnum WHERE NVL (dr, 0) = 0 AND (nonhandnum <> 0) AND (cinventoryid = v_rmb_onhandnum_cinvmanid) AND (cwarehouseid = v_rmb_onhandnum_cwhid) AND (Cinvbasid = v_rmb_onhandnum_cinvbasid) AND (pk_corp <> '1001'); IF num <> 1 THEN IF num <= 0 THEN i := i + 1; --此处,再次增加查询,打到店存商品的数量及信息显示!!!! SELECT invclassname invclass, invcode, invname, measname measure, num, storname INTO v_product FROM (SELECT cls.invclassname invclassname, inv.invcode invcode, inv.invname invname, meas.measname measname, oh.nonhandnum num, bs.STORNAME storname FROM rmb_onhandnum oh LEFT OUTER JOIN dtjt_invcheck t ON oh.conhandnumid = t.conhandnumid LEFT OUTER JOIN rmb_onhandfreeze f ON oh.conhandnumid = f.conhandnumid LEFT OUTER JOIN bd_invbasdoc inv ON oh.cinvbasid = inv.pk_invbasdoc LEFT OUTER JOIN bd_invcl cls ON inv.pk_invcl = cls.pk_invcl LEFT OUTER JOIN bd_measdoc meas ON inv.pk_measdoc = meas.pk_measdoc LEFT OUTER JOIN bd_invmandoc inm ON inm.PK_INVBASDOC = inv.PK_INVBASDOC LEFT OUTER JOIN bd_stordoc bs ON bs.PK_STORDOC = oh.CWHID WHERE 1 = 1 AND NVL (oh.dr, 0) = 0 AND NVL (t.dr, 0) = 0 AND NVL (cls.dr, 0) = 0 AND NVL (inv.dr, 0) = 0 AND NVL (meas.dr, 0) = 0 AND NVL (inm.dr, 0) = 0 AND NVL (bs.dr, 0) = 0 AND inv.PK_INVBASDOC = v_rmb_onhandnum_cinvbasid AND inm.PK_INVMANDOC = v_rmb_onhandnum_cinvmanid AND oh.nonhandnum > 0 AND (oh.cinvmanid = v_rmb_onhandnum_cinvmanid) AND (oh.cwhid = v_rmb_onhandnum_cwhid) AND (oh.cinvbasid = v_rmb_onhandnum_cinvbasid)); DBMS_OUTPUT.put_line ( '无批次检查异常结果显示:' || i || ',店铺名:' || v_product.storname || ' ,商品名称:' || v_product.invname || ' ,INVCODE:' || v_product.invcode || ' ,店存数量:' || v_rmb_onhandnum_nonhandnum || ',注意:该商品在现存内查询不到对应信息,请确认!!!!!!'); ELSE i := i + 1; --此处,再次增加查询,打到店存商品的数量及信息显示!!!! DBMS_OUTPUT.put_line ( '检查结果显示:NoVbatchocde:' || i || ',无批次号!!!!!!,店存数量为:' || v_rmb_onhandnum_nonhandnum || ',仓库:' || v_rmb_onhandnum_cwhid || ',存货基本档案: ' || v_rmb_onhandnum_cinvbasid || ' ,存货管理ID: ' || v_rmb_onhandnum_cinvmanid || ',在现存内查询到不是1条信息,无法判断,请检查两边数据是否一致!!!!!!'); END IF; ELSE SELECT * INTO v_ic_onhandnum FROM ic_onhandnum WHERE NVL (dr, 0) = 0 AND (nonhandnum <> 0) AND (cinventoryid = v_rmb_onhandnum_cinvmanid) AND (cwarehouseid = v_rmb_onhandnum_cwhid) AND (Cinvbasid = v_rmb_onhandnum_cinvbasid) AND (pk_corp <> '1001'); v_ic_onhandnum_nonhandnum := v_ic_onhandnum.nonhandnum; IF (v_ic_onhandnum_nonhandnum <> v_rmb_onhandnum_nonhandnum) THEN diffvalue := diffvalue + 1; --此处,再次增加查询,打到店存商品的数量及信息显示!!!! SELECT invclassname invclass, invcode, invname, measname measure, num, storname INTO v_product1 FROM (SELECT cls.invclassname invclassname, inv.invcode invcode, inv.invname invname, meas.measname measname, oh.nonhandnum num, bs.STORNAME storname FROM rmb_onhandnum oh LEFT OUTER JOIN dtjt_invcheck t ON oh.conhandnumid = t.conhandnumid LEFT OUTER JOIN rmb_onhandfreeze f ON oh.conhandnumid = f.conhandnumid LEFT OUTER JOIN bd_invbasdoc inv ON oh.cinvbasid = inv.pk_invbasdoc LEFT OUTER JOIN bd_invcl cls ON inv.pk_invcl = cls.pk_invcl LEFT OUTER JOIN bd_measdoc meas ON inv.pk_measdoc = meas.pk_measdoc LEFT OUTER JOIN bd_invmandoc inm ON inm.PK_INVBASDOC = inv.PK_INVBASDOC LEFT OUTER JOIN bd_stordoc bs ON bs.PK_STORDOC = oh.CWHID WHERE 1 = 1 AND NVL (oh.dr, 0) = 0 AND NVL (t.dr, 0) = 0 AND NVL (cls.dr, 0) = 0 AND NVL (inv.dr, 0) = 0 AND NVL (meas.dr, 0) = 0 AND NVL (inm.dr, 0) = 0 AND NVL (bs.dr, 0) = 0 AND inv.PK_INVBASDOC = v_rmb_onhandnum_cinvbasid AND inm.PK_INVMANDOC = v_rmb_onhandnum_cinvmanid AND oh.nonhandnum > 0 AND oh.nonhandnum = v_rmb_onhandnum_nonhandnum AND (oh.cinvmanid = v_rmb_onhandnum_cinvmanid) AND (oh.cwhid = v_rmb_onhandnum_cwhid) AND (oh.cinvbasid = v_rmb_onhandnum_cinvbasid)); DBMS_OUTPUT.put_line ( '无批次数量不一致检查结果No:' || diffvalue || ',店存量:' || v_ic_onhandnum_nonhandnum || ' ,现存量:' || v_rmb_onhandnum_nonhandnum || ' ,店铺名:' || v_product1.storname || ' ,商品名称:' || v_product1.invname || ' ,INVCODE:' || v_product1.invcode || ' ,店存/现存数量不一致,请检查!!!!!!'); END IF; END IF; ELSE --如果批次号不为空, DBMS_OUTPUT.put_line ( '怎么搞的,会有批次号呢,检查SQL语句!!!'); END IF; END IF; END LOOP; IF c_rmb_onhandnum_withnocode%ISOPEN THEN CLOSE c_rmb_onhandnum_withnocode; END IF; num := i + diffvalue; IF (num < 1) THEN DBMS_OUTPUT.put_line ( '以店存量验证无批次号产品正常!'); ELSE DBMS_OUTPUT.put_line ( '以店存量验证无批次号产品完毕,错误数量:' || num); END IF; i := 0; j := 0; diffvalue := 0; DBMS_OUTPUT.put_line ('==============================================='); DBMS_OUTPUT.put_line ( '============以下查询有批次号现存/店存数据=========='); DBMS_OUTPUT.put_line ('==============================================='); IF NOT c_rmb_onhandnum_withcode%ISOPEN THEN OPEN c_rmb_onhandnum_withcode; END IF; NULL; LOOP FETCH c_rmb_onhandnum_withcode INTO v_rmb_onhandnum; EXIT WHEN c_rmb_onhandnum_withcode%NOTFOUND; v_rmb_onhandnum_nonhandnum := v_rmb_onhandnum.nonhandnum; IF (v_rmb_onhandnum_nonhandnum > 0) --如果有店存量,就检查对应的现存是否有数据,而且数量是否一致!!! THEN v_rmb_onhandnum_cinvmanid := v_rmb_onhandnum.cinvmanid; v_rmb_onhandnum_cwhid := v_rmb_onhandnum.cwhid; v_rmb_onhandnum_cinvbasid := v_rmb_onhandnum.cinvbasid; v_rmb_onhandnum_vbatchcode := v_rmb_onhandnum.vbatchcode; IF (v_rmb_onhandnum_vbatchcode IS NULL) THEN --如果批次号为空,报怎么回事??? DBMS_OUTPUT.put_line ( '============怎么回事,批次号为空呢??????=========='); /* SELECT COUNT (*) INTO num FROM ic_onhandnum WHERE NVL (dr, 0) = 0 AND (nonhandnum <> 0) AND (cinventoryid = v_rmb_onhandnum_cinvmanid) AND (cwarehouseid = v_rmb_onhandnum_cwhid) AND (Cinvbasid = v_rmb_onhandnum_cinvbasid) AND (vlot = v_rmb_onhandnum_vbatchcode) AND (pk_corp <> '1001'); IF num <> 1 THEN i := i + 1; DBMS_OUTPUT.put_line ( '检查结果显示:NoVbatchocde:' || i || ',无批次号!!!!!!,仓库:' || v_rmb_onhandnum_cwhid || ',存货基本档案: ' || v_rmb_onhandnum_cinvbasid || ' ,存货管理ID: ' || v_rmb_onhandnum_cinvmanid || ',在现存内查询不到对应信息或是查询到不是1条信息,无法判断,请检查两边数据是否一致!!!!!!'); ELSE SELECT * INTO v_ic_onhandnum FROM ic_onhandnum WHERE NVL (dr, 0) = 0 AND (nonhandnum <> 0) AND (cinventoryid = v_rmb_onhandnum_cinvmanid) AND (cwarehouseid = v_rmb_onhandnum_cwhid) AND (Cinvbasid = v_rmb_onhandnum_cinvbasid) AND (vlot = v_rmb_onhandnum_vbatchcode) AND (pk_corp <> '1001'); v_ic_onhandnum_nonhandnum := v_ic_onhandnum.nonhandnum; IF (v_ic_onhandnum_nonhandnum <> v_rmb_onhandnum_nonhandnum) THEN diffvalue := diffvalue + 1; DBMS_OUTPUT.put_line ( '检查结果显示:No:' || diffvalue || ',批次号!!!!!!' || v_rmb_onhandnum_vbatchcode || ' ,现存量:' || v_ic_onhandnum_nonhandnum || ',店存量: ' || v_rmb_onhandnum_nonhandnum || ' ,仓库:' || v_rmb_onhandnum_cwhid || ',存货基本档案: ' || v_rmb_onhandnum_cinvbasid || ' ,存货管理ID: ' || v_rmb_onhandnum_cinvmanid || ',在库存数量不一致,请检查!!!!!!'); END IF;*/ -- END IF; ELSE --如果批次号不为空,检查有无对 应数量 SELECT COUNT (*) INTO num FROM ic_onhandnum WHERE NVL (dr, 0) = 0 AND (nonhandnum <> 0) AND (cinventoryid = v_rmb_onhandnum_cinvmanid) AND (cwarehouseid = v_rmb_onhandnum_cwhid) AND (Cinvbasid = v_rmb_onhandnum_cinvbasid) AND (vlot = v_rmb_onhandnum_vbatchcode) AND (pk_corp <> '1001'); IF (num <> 1) THEN IF num <= 0 THEN SELECT invclassname invclass, invcode, invname, measname measure, num, storname INTO v_product2 FROM (SELECT cls.invclassname invclassname, inv.invcode invcode, inv.invname invname, meas.measname measname, oh.nonhandnum num, bs.STORNAME storname FROM rmb_onhandnum oh LEFT OUTER JOIN dtjt_invcheck t ON oh.conhandnumid = t.conhandnumid LEFT OUTER JOIN rmb_onhandfreeze f ON oh.conhandnumid = f.conhandnumid LEFT OUTER JOIN bd_invbasdoc inv ON oh.cinvbasid = inv.pk_invbasdoc LEFT OUTER JOIN bd_invcl cls ON inv.pk_invcl = cls.pk_invcl LEFT OUTER JOIN bd_measdoc meas ON inv.pk_measdoc = meas.pk_measdoc LEFT OUTER JOIN bd_invmandoc inm ON inm.PK_INVBASDOC = inv.PK_INVBASDOC LEFT OUTER JOIN bd_stordoc bs ON bs.PK_STORDOC = oh.CWHID WHERE 1 = 1 AND NVL (oh.dr, 0) = 0 AND NVL (t.dr, 0) = 0 AND NVL (cls.dr, 0) = 0 AND NVL (inv.dr, 0) = 0 AND NVL (meas.dr, 0) = 0 AND NVL (inm.dr, 0) = 0 AND NVL (bs.dr, 0) = 0 AND inv.PK_INVBASDOC = v_rmb_onhandnum_cinvbasid AND inm.PK_INVMANDOC = v_rmb_onhandnum_cinvmanid AND oh.vbatchcode = v_rmb_onhandnum_vbatchcode AND oh.nonhandnum > 0 AND (oh.cinvmanid = v_rmb_onhandnum_cinvmanid) AND (oh.cwhid = v_rmb_onhandnum_cwhid) AND (oh.cinvbasid = v_rmb_onhandnum_cinvbasid)); i := i + 1; DBMS_OUTPUT.put_line ( '检查结果显示:No:' || i || ',批次号:' || v_rmb_onhandnum_vbatchcode || ' ,店存数量:' || v_rmb_onhandnum_nonhandnum || ' ,店铺名称:' || v_product2.storname || ' ,商品名称:' || v_product2.invname || ' ,INVCODE:' || v_product2.invcode || ',在现存内查询不到对应信息,无法判断,请检查两边数据是否一致!!!!!!'); ELSE i := i + 1; DBMS_OUTPUT.put_line ( '检查结果显示:No:' || i || ',批次号:' || v_rmb_onhandnum_vbatchcode || ',店存数量:' || v_rmb_onhandnum_nonhandnum || ' ,仓库:' || v_rmb_onhandnum_cwhid || ',存货基本档案: ' || v_rmb_onhandnum_Cinvbasid || ' ,存货管理ID: ' || v_rmb_onhandnum_cinvmanid || ',在现存内查询到不是1条信息,无法判断,请检查两边数据是否一致!!!!!!'); END IF; ELSE SELECT * INTO v_ic_onhandnum FROM ic_onhandnum WHERE NVL (dr, 0) = 0 AND (nonhandnum <> 0) AND (cinventoryid = v_rmb_onhandnum_cinvmanid) AND (cwarehouseid = v_rmb_onhandnum_cwhid) AND (Cinvbasid = v_rmb_onhandnum_cinvbasid) AND (vlot = v_rmb_onhandnum_vbatchcode) AND (vlot = v_rmb_onhandnum_vbatchcode) AND (pk_corp <> '1001'); v_ic_onhandnum_nonhandnum := v_ic_onhandnum.nonhandnum; IF (v_ic_onhandnum_nonhandnum <> v_rmb_onhandnum_nonhandnum) THEN diffvalue := diffvalue + 1; DBMS_OUTPUT.put_line ( '检查结果显示:No:' || diffvalue || ',批次号:' || v_rmb_onhandnum_vbatchcode || ' ,现存量:' || v_ic_onhandnum_nonhandnum || ',店存量: ' || v_rmb_onhandnum_nonhandnum || ' ,仓库:' || v_rmb_onhandnum_cwhid || ',存货基本档案: ' || v_rmb_onhandnum_Cinvbasid || ' ,存货管理ID: ' || v_rmb_onhandnum_cinvmanid || ',在库存数量不一致,请检查!!!!!!'); END IF; END IF; END IF; END IF; END LOOP; IF c_rmb_onhandnum_withcode%ISOPEN THEN CLOSE c_rmb_onhandnum_withcode; END IF; num := i + diffvalue; IF (num < 1) THEN DBMS_OUTPUT.put_line ( '以店存量验证有批次与产品正常!'); ELSE DBMS_OUTPUT.put_line ( '以店存量验证有批次号产品完毕,错误数量:' || num); END IF; END; /