ibmi-brunch-learn

Announcement

Collapse
No announcement yet.

dynamic SQL processing

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • dynamic SQL processing

    PHP Code:
          *=============================================================
          * 
    Program WKR44
          
    Purpose example of free format and using dynamic SQL
          
    *           
          *           

          * 
    Written 
          * 
    Author  

          * 
    Program Description
          
    *   
          *   

          *
          *    
    FromRoute               Dec  3      Input
          
    *    ToRoute                 Dec  3      Input
          
    *
          * 
    Indicator Usage
          
    *   None
          
    *=============================================================

         
    d WKR44           pr
         d  FromRoute                    15  5
         d  ToRoute                      15  5

         d WKR44           pi
         d  FromRoute                    15  5
         d  ToRoute                      15  5

             
    //Procedures

         
    d openOrderList   pr
         d FetchNextOrder  pr              n
         d closeOrderList  pr

         d count           s              4  0
         d  date           s              7  0 dim
    (200)
         
    d ISODate         s               D
         d outdate         s             15  5
         d outpronumber    s             15  5
         d  pronumber      s              7  0 dim
    (200)
         
    d sd              s              4  0
         d sql             s          32000a   Varying
         d sqldate         s              7  0
         d sqlerror        s               n
         d sqlpronumber    s              7  0
         d todayCYMD       s              7  0
         d workiso         s              8  0

         d routedata     e ds                  extname
    (wkartnoqualified

         d $reroute        pr                  extpgm
    ('WKR28')
         
    d   outdt                       15  5
         d   outPro
    #                     15  5



          
    /free

            
    //--------------------------------------------------------
            // M A I N   L I N  E
            //--------------------------------------------------------


              
    exsr Hskpg;

                
    exsr $getpros;
                
    exsr $deleteRoutes;

              
    select;
               
    when ToRoute <> *zeros;
                
    exsr $rerouteOrds;
              
    endsl;



              *
    inlr = *on;

            
    //--------------------------------------------------------
            // $getpros - read the wkartno records save pro#'s
            //--------------------------------------------------------

                 
    begsr $getpros;

                   
    sql 'Select * from wkartno' +
                         
    ' where wadst# = ' + %editc(%dec(FromRoute:3:0):'X')  +
                         
    ' and WADAT > ' + %editc(TodayCYMD:'X');

                   
    openOrderList();
                    
    Dow fetchNextOrder();
                     
    SD +=1;
                     
    pronumber(sd) = routedata.waproa;
                     
    date(sd) = routedata.wadat;
                    
    enddo;
                   
    closeOrderList();

                 
    endsr;

            
    //--------------------------------------------------------
            // $delteroutes - delete all the routes
            //--------------------------------------------------------

                 
    begsr $deleteroutes;
                  for 
    count 1 to SD;

                  
    SQLdate date(count);
                  
    SQLPronumber  pronumber(count);
          /
    end-free
         c
    /exec sql
         c
    delete from WKARTNO
         c
    +  where  WADAT  = : SQLdate and
         
    c+         WAPROA = : SQLProNumber
         c
    /end-exec
          
    /free


                  
    endfor;
                 
    endsr;

            
    //--------------------------------------------------------
            // $rerouteOrds  - call wkr28 to reroute the pro#'s
            //--------------------------------------------------------

                 
    begsr $rerouteOrds;
                  for 
    count 1 to SD;

                  
    //convert the date from *CYMD to *ISO
                   
    SQLDate date(count);
                   
    test(de) *cymd SQLDATE;
                    if 
    not%error;
                     
    workIso =
                     %
    uns(%char(%Date(SQLDATE:*cymd):*iso0));
                     
    outdate workIso;
                    endif;
                     
    outpronumber pronumber(count);
                     
    $reroute(outdateoutpronumber);
                  endfor;
                 
    endsr;
            
    //--------------------------------------------------------
            // Hskpg - one time run subroutine
            //--------------------------------------------------------

                 
    begsr Hskpg;

                 
    isodate = %date();
                 
    todayCYMD = %uns(%char(ISODATE:*cymd0));
                 
    endsr;

          /
    end-free
         c
    /exec sql
         c
    set option commit=*none,
         
    cdatfmt=*iso
         c
    /end-exec

          
    *--------------------------------------------------------
          *  
    openOrderList  Open a cursor to read the Orders file
          
    *--------------------------------------------------------
         
    p openOrderList   b

         d openOrderList   pi

         c
    /exec sql
         c
    + declare wkartnoCursor cursor
         c
    +    for wkStatement
         c
    /end-exec
         c
    /exec sql
         c
    prepare wkStatement from :sql
         c
    /end-exec
         c
    /exec sql
         c
    open wkartnoCursor
         c
    /end-exec

         p openOrderList   e
          
    *--------------------------------------------------------
          *  
    fetchNextOrder read order one at a time
          
    *--------------------------------------------------------
         
    p fetchNextOrder  b

         d fetchNextOrder  pi              N

         c
    /exec sql
         c
    fetch next from wkartnoCursor
         c
    +    into :routedata
         c
    /end-exec

          
    /free
             
    if sqlstt '02000';
               return  *
    on;
             else;
               return  *
    off;
             endif;
          /
    end-free

         p fetchNextOrder  e
          
    *--------------------------------------------------------
          *  
    closeOrderList  Close the OrderHdr cursor
          
    *--------------------------------------------------------
         
    p closeOrderList  b

         d closeOrderList  pi

         c
    /exec sql
         c
    close wkartnoCursor
         c
    /end-exec

         p closeOrderList  e
          
    *--------------------------------------------------------

    Attached Files
    All my answers were extracted from the "Big Dummy's Guide to the As400"
    and I take no responsibility for any of them.

    www.code400.com

  • #2
    Re: dynamic SQL processing

    Hmmm... Looks familiar!
    "Time passes, but sometimes it beats the <crap> out of you as it goes."

    Comment


    • #3
      Re: dynamic SQL processing

      Its nice gonna use it in all my stuff from now on .....
      Thanks and Happy Turkey day!
      All my answers were extracted from the "Big Dummy's Guide to the As400"
      and I take no responsibility for any of them.

      www.code400.com

      Comment

      Working...
      X