ProTech's home page

ProTech-Online.com

IBM DB2 SQL code example to pull Quantus indemted BOM.

CREATE PROCEDURE TEST_BOM_EXTRACTION (
    IN @BRANCH VARCHAR(8),
    IN @ITEMNUM VARCHAR(1000)
)
SPECIFIC BOM_EXTRACTION
DYNAMIC RESULT SETS 1
LANGUAGE SQL
------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------
P1: BEGIN
    DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_ITEMNUMS (
       LINENUM INTEGER,
       SEQSNUM INTEGER,
       ITEMNUM VARCHAR(32)
       )
       ON COMMIT DELETE ROWS WITH REPLACE NOT LOGGED;
    DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_BOMS (
       BRANCH VARCHAR(8),
       PARENTITEMNUM VARCHAR(23),
       OPSEQUENCE VARCHAR(8),
       OPCODE VARCHAR(4),
       ITEMNUM VARCHAR(32),
       DESCRIPTION VARCHAR(32),
       UOFM VARCHAR(4),
       ITEMQTY DOUBLE,
       UNITTIME DOUBLE,
       LABOURTIMEUNIT CHAR,
       SETUPTIME DOUBLE,
       SETUPTIMEUNIT CHAR
       )
       ON COMMIT DELETE ROWS WITH REPLACE NOT LOGGED;
    BEGIN ATOMIC
       DECLARE intLINENUM INTEGER DEFAULT 0;
       DECLARE intSEQSNUM INTEGER DEFAULT 0;
       DECLARE prevSEQSNUM INTEGER DEFAULT 0;
       DECLARE intCOUNT INTEGER DEFAULT 0;
       DECLARE newSEQS BOOLEAN;
       DECLARE cursor1 CURSOR WITH RETURN TO CLIENT FOR
           SELECT * FROM SESSION.TEMP_BOMS;
       SET intCOUNT = QUERIES.TEST_BOM_COUNT(@BRANCH, @ITEMNUM);
       IF intCOUNT > 0 THEN
           INSERT INTO SESSION.TEMP_ITEMNUMS
                  VALUES(intLINENUM, intSEQSNUM, @ITEMNUM);
           SET intLINENUM = intLINENUM + 1;
--         loop1: FOR ROW1 AS
--             SELECT
--                QUANTUS.ASSEMBLY_OPTION.ITEMNUM     
--             FROM QUANTUS.ASSEMBLY_OPTION
--                INNER JOIN QUANTUS.INVENTORY ON QUANTUS.ASSEMBLY_OPTION.BRANCH = QUANTUS.INVENTORY.BRANCH
--                        AND QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM = QUANTUS.INVENTORY.ITEMNUM
--             WHERE
--                LTRIM(QUANTUS.ASSEMBLY_OPTION.BRANCH) = @BRANCH AND
--                 UPPER(LTRIM(QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM)) = UPPER(@ITEMNUM) AND
--                QUANTUS.ASSEMBLY_OPTION.OPCODE = 'BOM' AND
--                QUANTUS.ASSEMBLY_OPTION.TYPE = 'W'
--             ORDER BY QUANTUS.ASSEMBLY_OPTION.BRANCH, QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM
--         DO
--             INSERT INTO SESSION.TEMP_ITEMNUMS
--                VALUES(intLINENUM, intSEQSNUM, ROW1.ITEMNUM);
--             SET intLINENUM = intLINENUM + 1;
--         END FOR loop1;       
           SET newSEQS = TRUE;
           WHILE newSEQS = TRUE DO
               SET newSEQS = FALSE;
               SET prevSEQSNUM = intSEQSNUM;
               SET intSEQSNUM = intSEQSNUM + 1;
               loop2: FOR ROW2 AS
                  SELECT * FROM SESSION.TEMP_ITEMNUMS WHERE SESSION.TEMP_ITEMNUMS.SEQSNUM = prevSEQSNUM ORDER BY LINENUM
               DO
                  SET intCOUNT = 0;
                  SET intCOUNT = QUERIES.TEST_BOM_COUNT(@BRANCH, ROW2.ITEMNUM);
                  IF intCOUNT > 0 THEN
                      SET newSEQS = TRUE;
                  END IF;
                  IF intCOUNT > 0 THEN
                      loop3: FOR ROW3 AS
                          SELECT
                              QUANTUS.ASSEMBLY_OPTION.ITEMNUM     
                          FROM QUANTUS.ASSEMBLY_OPTION
                              INNER JOIN QUANTUS.INVENTORY ON QUANTUS.ASSEMBLY_OPTION.BRANCH = QUANTUS.INVENTORY.BRANCH
                                     AND QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM = QUANTUS.INVENTORY.ITEMNUM
                          WHERE
                              LTRIM(QUANTUS.ASSEMBLY_OPTION.BRANCH) = @BRANCH AND
                             UPPER(LTRIM(QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM)) = UPPER(LTRIM(ROW2.ITEMNUM)) AND
                              QUANTUS.ASSEMBLY_OPTION.OPCODE = 'BOM' AND
                              QUANTUS.ASSEMBLY_OPTION.TYPE = 'W'
                          ORDER BY QUANTUS.ASSEMBLY_OPTION.BRANCH, QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM
                      DO
                          INSERT INTO SESSION.TEMP_ITEMNUMS
                              VALUES(intLINENUM, intSEQSNUM, ROW3.ITEMNUM);
                          SET intLINENUM = intLINENUM + 1;
                      END FOR loop3;
                  END IF;
               END FOR loop2;
           END WHILE;
           loop4: FOR ROW4 AS
               SELECT * FROM SESSION.TEMP_ITEMNUMS ORDER BY LINENUM
           DO
               loop5: FOR ROW5 AS
                  SELECT
                      TRIM(QUANTUS.ASSEMBLY_OPTION.BRANCH) AS BRANCH,
                      LTRIM(QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM) AS PARENTITEMNUM,
                      LTRIM(QUANTUS.ASSEMBLY_OPTION.OPSEQUENCE) AS OPSEQUENCE,
                      QUANTUS.ASSEMBLY_OPTION.OPCODE,
                      LTRIM(QUANTUS.ASSEMBLY_OPTION.ITEMNUM) AS ITEMNUM,
                      RTRIM(QUANTUS.ASSEMBLY_OPTION.ALTITEMDESC) AS DESCRIPTION,
                      RTRIM(QUANTUS.ASSEMBLY_OPTION.UOFM) AS UOFM,
                      QUANTUS.ASSEMBLY_OPTION.ITEMQTY,
                      QUANTUS.ASSEMBLY_OPTION.UNITTIME,
                      QUANTUS.ASSEMBLY_OPTION.LABOURTIMEUNIT,
                      QUANTUS.ASSEMBLY_OPTION.SETUPTIME,
                      QUANTUS.ASSEMBLY_OPTION.SETUPTIMEUNIT      
                  FROM QUANTUS.ASSEMBLY_OPTION
                      INNER JOIN QUANTUS.INVENTORY ON QUANTUS.ASSEMBLY_OPTION.BRANCH = QUANTUS.INVENTORY.BRANCH
                          AND QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM = QUANTUS.INVENTORY.ITEMNUM
                  WHERE
                      LTRIM(QUANTUS.ASSEMBLY_OPTION.BRANCH) = @BRANCH AND
                      UPPER(LTRIM(QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM)) = UPPER(LTRIM(ROW4.ITEMNUM))AND
                      QUANTUS.ASSEMBLY_OPTION.TYPE = 'W'
                  ORDER BY QUANTUS.ASSEMBLY_OPTION.BRANCH, QUANTUS.ASSEMBLY_OPTION.PARENTITEMNUM
               DO
                  INSERT INTO SESSION.TEMP_BOMS
                              VALUES(
                                 ROW5.BRANCH,
                                 ROW5.PARENTITEMNUM,
                                 ROW5.OPSEQUENCE,
                                 ROW5.OPCODE,
                                 ROW5.ITEMNUM,
                                 ROW5.DESCRIPTION,
                                 ROW5.UOFM,
                                 ROW5.ITEMQTY,
                                 ROW5.UNITTIME,
                                 ROW5.LABOURTIMEUNIT,
                                 ROW5.SETUPTIME,
                                 ROW5.SETUPTIMEUNIT
                              );
               END FOR loop5;
           END FOR loop4;
       END IF;
       OPEN cursor1;
    END;

END P1



Copyright © 2013 ProTechs-Online.com; All rights reserved.