Code:
- CREATE PROCEDURE LIBRARY/GET_COMPANY_PROMOS_BREAKDOWN (
- IN @COMPANY CHAR(3) ,
- IN @FISYEAR DECIMAL(4, 0) ,
- IN @FISPERIOD DECIMAL(2, 0) ,
- IN @MEASURE CHAR(10) )
- DYNAMIC RESULT SETS 1
- LANGUAGE SQL
- SPECIFIC LIBRARY/PGM
- NOT DETERMINISTIC
- MODIFIES SQL DATA
- CALLED ON NULL INPUT
- SET OPTION ALWBLK = *ALLREAD ,
- OUTPUT=*PRINT,
- ALWCPYDTA = *OPTIMIZE ,
- COMMIT = *NONE ,
- DECRESULT = (31, 31, 00) ,
- DFTRDBCOL = *NONE ,
- DLYPRP = *NO ,
- DYNDFTCOL = *NO ,
- DYNUSRPRF = *USER ,
- RDBCNNMTH = *RUW ,
- SRTSEQ = *HEX
- BEGIN
-
- DECLARE NO_TABLE CONDITION FOR SQLSTATE '42704' ;
- DECLARE CURSOR_NOT_OPEN CONDITION FOR SQLSTATE '24501' ;
- DECLARE @BEGINYEAR DECIMAL ( 4 , 0 ) ;
- DECLARE @BEGINPERIOD DECIMAL ( 2 , 0 ) ;
- DECLARE @TMPYEAR DECIMAL ( 4 , 0 ) ;
- DECLARE @TMPPERIOD DECIMAL ( 2 , 0 ) ;
- DECLARE TABLEEXISTS VARCHAR ( 80 ) ;
- DECLARE CURSOROPEN CHAR ( 1 ) ;
- DECLARE C1 CURSOR WITH RETURN FOR
- SELECT COALESCE ( SUMTLDD , DESCRIPTION ) AS DESCRIPTION , SUM ( AMOUNT ) AMOUNT
- FROM QTEMP / PROMOS
- LEFT JOIN TLFIL / TLPCODSUM
- ON SUMCONO = @COMPANY
- AND SUMSCD = 'PROMO'
- AND DESCRIPTION = SUMTLDS
- GROUP BY COALESCE ( SUMTLDD , DESCRIPTION )
- ORDER BY 1 ;
-
- A : BEGIN
- DECLARE EXIT HANDLER FOR NO_TABLE
- BEGIN
- SET TABLEEXISTS = '0' ;
- END ;
- DELETE FROM QTEMP / PROMOS ;
-
- SET TABLEEXISTS = '1' ;
- END ;
- IF TABLEEXISTS = '0' THEN
- CREATE TABLE QTEMP / PROMOS (
- LOCATION CHAR( 6 ) NOT NULL WITH DEFAULT,
- DESCRIPTION CHAR ( 30 ) NOT NULL WITH DEFAULT ,
- AMOUNT DEC ( 11 , 2 ) NOT NULL WITH DEFAULT
- ) ;
- END IF ;
-
- SET @BEGINPERIOD = CASE WHEN @MEASURE = 'ROLLYTD' THEN @FISPERIOD - 11
- WHEN @MEASURE = 'ROLL90' THEN @FISPERIOD - 2
- WHEN @MEASURE = 'YTD' THEN 1
- WHEN @MEASURE = 'QTD' AND @FISPERIOD IN ( 1 , 2 , 3 ) THEN 1
- WHEN @MEASURE = 'QTD' AND @FISPERIOD IN ( 4 , 5 , 6 ) THEN 4
- WHEN @MEASURE = 'QTD' AND @FISPERIOD IN ( 7 , 8 , 9 ) THEN 7
- WHEN @MEASURE = 'QTD' AND @FISPERIOD IN ( 10 , 11 , 12 ) THEN 10
- ELSE @FISPERIOD
- END ;
-
- SET @BEGINYEAR = @FISYEAR ;
- IF @BEGINPERIOD <= 0 THEN
- SET @BEGINPERIOD = @BEGINPERIOD + 12 ;
- SET @BEGINYEAR = @BEGINYEAR - 1 ;
- END IF ;
- SET @TMPYEAR = @BEGINYEAR ;
- SET @TMPPERIOD = @BEGINPERIOD ;
- WHILE @TMPYEAR * 100 + @TMPPERIOD <= @FISYEAR * 100 + @FISPERIOD DO
-
- IF @TMPYEAR >= 2012 THEN
-
- INSERT INTO QTEMP / PROMOS
- WITH cte AS (
- SELECT CTRC02, TXDESC, TXFAMT
- FROM ChartOfAccountsFile
- JOIN AccountPostingFile
- ON CTPAGE = TXPAGE
- WHERE TXCO = @COMPANY
- AND TXYEAR = @TMPYEAR
- AND TXMNTH = @TMPPERIOD
- AND TXPOST = 'P'
- AND CTSEGN = 5
- AND CTCO = @COMPANY
- AND CTRC01 = @COMPANY
- AND CTRC04 IN ( SELECT CODCOD
- FROM CodesFile
- WHERE CODCPY = @COMPANY AND
- CODTYP = 'DCA' AND
- CODUC1 = 'PROMO' AND
- CODSTATUS = '1' ) )
- SELECT CTRC02, TXDESC, TXFAMT FROM cte;
-
- ELSE
- INSERT INTO QTEMP / PROMOS
- WITH cte AS (
- SELECT CTRC02, TXDESC, TXFAMT
- FROM ChartOfAccounts
- JOIN AccountPostingFile
- ON CTPAGE = TXPAGE
- WHERE TXCO = @COMPANY
- AND TXYEAR = @TMPYEAR
- AND TXMNTH = @TMPPERIOD
- AND TXPOST = 'P'
- AND CTSEGN = 5
- AND CTCO = @COMPANY
- AND CTRC01 = @COMPANY
- AND CTRC04 IN ( SELECT CODCOD
- FROM CodesFile
- WHERE CODCPY = @COMPANY AND
- CODTYP = 'DCA' AND
- CODUC1 = 'HIST' AND
- CODSTATUS = '1' ) )
- SELECT CTRC02, TXDESC, TXFAMT FROM cte;
-
-
- DELETE FROM QTEMP / PROMOS
- WHERE EXISTS ( SELECT 1
- FROM DescriptionSummaryFile
- WHERE SUMCONO = @COMPANY
- AND SUMSCD <> 'PROMO'
- AND DESCRIPTION = SUMTLDS
- ) ;
-
- IF @COMPANY = '001' THEN
- DELETE FROM QTEMP / PROMOS
- WHERE EXISTS ( SELECT 1
- FROM CodesFile
- WHERE CODCPY = @COMPANY
- AND CODTYP = 'PCR'
- AND CODSTATUS = '1'
- AND CODCOD LIKE 'EXC%'
- AND TRIM ( DESCRIPTION ) LIKE '%' CONCAT TRIM ( CODDSC )
- ) ;
- END IF ;
- END IF ;
- SET @TMPPERIOD = @TMPPERIOD + 1 ;
- IF @TMPPERIOD > 12 THEN
- SET @TMPPERIOD = @TMPPERIOD - 12 ;
- SET @TMPYEAR = @TMPYEAR + 1 ;
- END IF ;
-
-
- END WHILE ;
- B : BEGIN
- DECLARE EXIT HANDLER FOR CURSOR_NOT_OPEN
- BEGIN
- SET CURSOROPEN = '0' ;
- END ;
- CLOSE C1 ;
-
- SET CURSOROPEN = '1' ;
- END ;
-
- OPEN C1 ;
- END ;
|
|