Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

Need to rewrite the UNION query to 2 parts

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DB2
View previous topic :: :: View next topic  
Author Message
sureshbabu.jv

New User


Joined: 11 Apr 2006
Posts: 41
Location: Chennai

PostPosted: Thu Jan 04, 2007 3:22 pm    Post subject: Need to rewrite the UNION query to 2 parts
Reply with quote

We are using one cursor in the program TIBAPSUM , I am assuming that because of this cursor the job taking much time to get completed.I would like to improve the performance of that query. Could you please find the below query and suggest me if is there any way to improve the performance of that query.

I got an idea on this that is this should be rewritten as an extract from aplin and apmst, a 2-file match and a load but i am not getting how to rewrite the query for this requirement..

Please give me ur suggestions on this to rewrite this query like extract, a 2-file match and load.

Code:
EXEC SQL DECLARE TIVAPSUM CURSOR FOR             
    SELECT                                       
       :BLANK-SUMMARY-IND,                       
       APMST.REMIT_VEND_CODE,                   
       APMST.REMIT_VEND_SUFFIX,                 
       APMST.COMPANY,                           
       APMST.EMPLOYEE_NUMBER,                   
       APMST.BANK_ID,                           
       APMST.BANK_ACCOUNT,                       
       APMST.PAYMENT_STATUS,                     
       APMST.INVOICE_STATUS,                     
       APMST.PAYMENT_DATE,                       
       APMST.PAYMT_REF_NO,                       
       :PAYMENT-ALL-LINE-GLIT,                   
       APMST.PAYMENT_AMT,                       
       APMST.PAYMENT_AMT_FX,                     
       APMST.INV_AMT_WITHHELD,                   
       APMST.CURRENCY_CODE,                     
       APMST.CURRENCY_CODE_FX,                   
       APMST.CURRENCY_RATE_FROM,                 
       APMST.PAYMENT_METHOD                     
    FROM TIDAPMST APMST                         
    WHERE                                       
          (APMST.INVOICE_TYPE NOT IN             
              (                                 
              :MODEL-7-LITRL,                   
              :DEPOSIT-6-LITRL,                 
              :WITHDRAW-8-LITRL))               
      AND ( ( (APMST.PAYMENT_STATUS IN           
               (                                 
              :APPROVED-28-LITRL,               
              :HOLD-29-LITRL,                   
              :PAID-30-LITRL))                   
          AND (APMST.INVOICE_STATUS IN           
             (                                           
                :ACCEPTED-2-LITRL,                       
                :MISMATCH-4-LITRL,                       
                :COMPLETE-3-LITRL)))                     
                                                         
         OR ( (APMST.INVOICE_STATUS = :MISMATCH-4-LITRL) 
                                                         
             AND (APMST.PAYMENT_STATUS =                 
                     :APPROVED-28-LITRL))                 
                                                         
         OR ( (APMST.PAYMENT_STATUS IN                   
              (                                           
                 :PENDING-26-LITRL,                       
                 :REJECT-31-LITRL,                       
                 :REVIEW-32-LITRL))                       
                                                         
             AND (APMST.INVOICE_STATUS =                 
                     :ACCEPTED-2-LITRL)))                 
                                                         
   AND NOT EXISTS                                         
      (                                                   
       SELECT                                             
          APLIN.PAYMT_REF_NO                             
       FROM TIDAPLIN APLIN                               
       WHERE                                             
           (APLIN.PAYMT_REF_NO =                         
                APMST.PAYMT_REF_NO)                       
           AND (APLIN.SUBLINE_LINE ?> :BLANK-SUBLINE-APCOM)   
           AND (((APLIN.LINE_PAY_STATUS ?=                     
                    APMST.PAYMENT_STATUS) AND                 
                ((APLIN.INVOICE_LINE ?=                       
                     :WITHHELD-LINE-APCOM ) OR                 
                 (APLIN.LINE_PAY_STATUS ?= :HOLD-10-LITRL ))) 
             OR (APLIN.INVOICE_LINE_STAT ?=                   
                     APMST.INVOICE_STATUS))                   
          )                                                   
                                                               
    UNION                                                     
                                                               
      SELECT                                                   
         :BLANK-SUMMARY-IND,                                   
         APMST.REMIT_VEND_CODE,                               
         APMST.REMIT_VEND_SUFFIX,                             
         APMST.COMPANY,                                       
         APMST.EMPLOYEE_NUMBER,                               
         APMST.BANK_ID,                                       
         APMST.BANK_ACCOUNT,                                   
         APLIN.LINE_PAY_STATUS,                               
         APLIN.INVOICE_LINE_STAT,                             
         APMST.PAYMENT_DATE,                                   
         APMST.PAYMT_REF_NO,                                   
         APLIN.INVOICE_LINE,                                   
         APLIN.PAYMENT_AMT,                                   
         APLIN.PAYMENT_AMT_FX,                                 
         :ZVAL-INV-AMT-WITHHELD,                               
        APLIN.CURRENCY_CODE,                                 
        APLIN.CURRENCY_CODE_FX,                               
        APLIN.CURRENCY_RATE_FROM,                             
        APMST.PAYMENT_METHOD                                 
     FROM TIDAPMST APMST,                                     
          TIDAPLIN APLIN                                     
     WHERE                                                   
         (APMST.PAYMT_REF_NO =                               
              APLIN.PAYMT_REF_NO) AND                         
         (APMST.INVOICE_TYPE NOT IN                           
            (                                                 
               :MODEL-7-LITRL,                               
               :DEPOSIT-6-LITRL,                             
               :WITHDRAW-8-LITRL)) AND                       
         (APLIN.SUBLINE_LINE ?> :BLANK-SUBLINE-APCOM) AND     
                                                             
         (((APLIN.LINE_PAY_STATUS IN                         
             (                                               
               :APPROVED-9-LITRL,                             
               :HOLD-10-LITRL,                               
               :PAID-11-LITRL))        AND                   
            (APLIN.INVOICE_LINE_STAT IN                       
             (                                               
               :ACCEPTED-23-LITRL,                           
               :MISMATCH-25-LITRL,                           
               :COMPLETE-24-LITRL)))  OR                     
                                                             
          ((APLIN.INVOICE_LINE_STAT =                         
               :MISMATCH-25-LITRL)   AND                     
            (APLIN.LINE_PAY_STATUS =                         
               :APPROVED-9-LITRL))    OR                     
                                                             
                                                             
          ((APLIN.LINE_PAY_STATUS IN                         
            (                                               
               :PENDING-27-LITRL,                           
               :REJECT-12-LITRL,                             
               :REVIEW-13-LITRL))        AND                 
            (APLIN.INVOICE_LINE_STAT = :ACCEPTED-23-LITRL)))
                                                             
      AND EXISTS                                             
         (                                                   
          SELECT                                             
             APLI1.PAYMT_REF_NO                             
          FROM TIDAPLIN APLI1                               
          WHERE                                             
              (APLI1.PAYMT_REF_NO =                         
                   APMST.PAYMT_REF_NO)                       
          AND (APLI1.SUBLINE_LINE ?> :BLANK-SUBLINE-APCOM)   
          AND (((APLI1.LINE_PAY_STATUS ?=                   
                   APMST.PAYMENT_STATUS) AND                 
               ((APLI1.INVOICE_LINE ?=                       
                    :WITHHELD-LINE-APCOM ) OR               
                (APLI1.LINE_PAY_STATUS ?= :HOLD-10-LITRL )))
            OR (APLI1.INVOICE_LINE_STAT ?=                   
                    APMST.INVOICE_STATUS))                   
         )                                                   
                                                             
 END-EXEC.       

Thanks,
Suresh
Back to top
View user's profile Send private message

DavidatK

Active Member


Joined: 22 Nov 2005
Posts: 700
Location: Troy, Michigan USA

PostPosted: Fri Jan 05, 2007 3:30 am    Post subject: Re: Need to rewrite the UNION query to 2 parts
Reply with quote

Suresh,

you are corrcet that sometimes, doing an unload and processing that can be faster, sometimes much faster than a cursor declared in the program, sometimes not.

How many total rows are in the tables you are extracting from, and how many rows does the cursor select from the tables?

What other processing is going on in the program that might affect the performance?

When you say the program is running slow, what do you mean? How much clock time does the program take and how much CPU time? To process how many rows?
Back to top
View user's profile Send private message
sureshbabu.jv

New User


Joined: 11 Apr 2006
Posts: 41
Location: Chennai

PostPosted: Fri Jan 05, 2007 12:04 pm    Post subject: Hi dave
Reply with quote

The job fetched and inserted around 3340321 records(rows). I think day by day the records count will be increase. Rest of the program process is looks fine. Totally job taking around 1.45 min CPU time to get completed that's why i would like to improve the performance of this.

COuld you please give me an idea to rewrite the query to 2 parts.

Thanks,
Suresh
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DB2 All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts JCL to Set Return code based on DB2 S... vinu78 DB2 17 Mon Mar 13, 2017 9:47 pm
No new posts CICS Question RE: Browse, Readnext an... moezbud CICS 7 Sun Mar 05, 2017 5:45 am
No new posts SQL query not working in Cobol program. CuriousMainframer COBOL Programming 14 Wed Feb 22, 2017 5:56 pm
No new posts Omegamon for DB2 query ashek15 DB2 0 Wed Feb 15, 2017 11:25 am
No new posts Query on DB2 WLM stored procedures ashek15 DB2 8 Sun Feb 12, 2017 11:13 pm


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us