HP 3000 Manuals

Sequential Table Processing [ ALLBASE/SQL Pascal Application Programming Guide ] MPE/iX 5.0 Documentation


ALLBASE/SQL Pascal Application Programming Guide

Sequential Table Processing 

In sequential table processing, you process an active set by fetching a
row at a time and optionally deleting or updating it.  Sequential table
processing is useful when the likelihood of row changes throughout a set
of rows is high and when a program user does not need to review multiple
rows to decide whether to change a specific row.

In the following example, rows for parts having the same SalesPrice are
displayed one at a time.  The program user can delete a displayed row or
change its SalesPrice.  Note that the host variable declarations are
identical to those for the simple data manipulation example, since only
one row at a time is fetched.  Rows are fetched as long as SQLCODE is 0,
as shown in the following example:

     const
          OK        =   0;
          NotFound  = 100;
     var
          EXEC SQL BEGIN DECLARE SECTION;
          PartNumber       : packed array[1..16] of char;
          PartName         : packed array[1..30] of char;
          PartNameInd      : sqlInd;
          SalesPrice       : longreal;
          SalesPriceInd    : sqlInd;
          EXEC SQL END DECLARE SECTION;
     :
     procedure GetActiveSet;
     begin
       The cursor declared allows the user to change the SalesPrice of 
       the current row.  It can also be used to delete the current row. 

       EXEC SQL DECLARE PriceCursor
                 CURSOR FOR
                 SELECT PartNumber, PartName, SalesPrice
                   FROM PurchDB.Parts
                  WHERE SalesPrice = :SalesPrice
          FOR UPDATE OF SalesPrice;
       .
       .     The program accepts a salesprice value from the user. 
       .
       EXEC SQL OPEN PriceCursor;

       if SQLCA.SQLCODE <> OK then
         begin
         SqlStatusCheck;
         ReleaseDBE;
         end
       else
         GetRow;
     end;

     procedure GetRow;
     begin

       while SQLCA.SQLCODE = OK do
       begin

         EXEC SQL FETCH  PriceCursor
                   INTO :PartNumber,
                        :PartName :PartNameInd,
                        :SalesPrice :SalesPriceInd;

         case SQLCA.SQLCODE of
         OK          : DisplayRow
         NotFound    : writeln('No more rows!');
         otherwise   : SqlStatusCheck;
         end;
     end;
     procedure DisplayRow;
     begin

       Each row fetched is displayed.  Depending on the user's response 
       to a program prompt, the row may be deleted or its SalesPrice 
       value changed. 

       if response[1] = 'D' then
         begin
         EXEC SQL DELETE FROM PurchDB.Parts
                   WHERE CURRENT OF PriceCursor;
         .
         .  Status checking code appears here.
         .
         end;
       if response[1] = 'U' then
         begin
         .
         .  A new SalesPrice is accepted.
         .
         EXEC SQL UPDATE PurchDB.Parts
                     SET SalesPrice = :SalesPrice
                   WHERE CURRENT OF PriceCursor;
         .
         .  Status checking code appears here.
         .
         end;

Sequential table processing is discussed in more detail in the chapter,
"Processing with Cursors."



MPE/iX 5.0 Documentation