HP 3000 Manuals

Sample Program Using BULK Processing [ ALLBASE/SQL COBOL Application Programming Guide ] MPE/iX 5.0 Documentation


ALLBASE/SQL COBOL Application Programming Guide

Sample Program Using BULK Processing 

The flow chart in Figure 9-1 summarizes the functionality of program
COBEX9.  This program creates orders in the sample DBEnvironment,
PARTSDBE. Each order is placed with a specific vendor, to obtain one or
more parts supplied by that vendor.

The order header consists of data from a row in table PURCHDB.ORDERS:

                  ORDERNUMBER (defined NOT NULL)
                  VENDORNUMBER
                  ORDERDATE

An order usually also consists of one or more line items, represented by
one or more rows in table PURCHDB.ORDERITEMS:

                  ORDERNUMBER (defined NOT NULL)
                  ITEMNUMBER (defined NOT NULL)
                  VENDPARTNUMBER
                  PURCHASEPRICE (defined NOT NULL)
                  ORDERQTY
                  ITEMDUEDATE
                  RECEIVEDQTY

Program COBEX9 uses a simple INSERT command to create the order header
and, optionally, a BULK INSERT command to insert line items.

The runtime dialog for COBEX9 appears in Figure 9-2 , and the source
code in Figure 9-3 .

To establish a DBE session, COBEX9 performs paragraph
CONNECT-DBENVIRONMENT  3 , which executes the CONNECT command  52 .

The program then executes paragraph CREATE-ORDER through
CREATE-ORDER-EXIT until the DONE-FLAG contains an X  4 .

Paragraph CREATE-ORDER prompts for a vendor number or a zero  7 .  When
the user enters a zero, an X is moved to DONE-FLAG  8  and the program
terminates.  When the user enters a vendor number, COBEX9:

   *   Validates the number entered.

   *   Creates an order header if the vendor number is valid.

   *   Optionally inserts line items if the order header has been
       successfully created; the part number for each line item is
       validated to ensure the vendor actually supplies the part.

   *   Displays the order created.

To validate the vendor number, paragraph VALIDATE-VENDOR is executed  9 .
Paragraph VALIDATE-VENDOR starts a transaction by performing paragraph
BEGIN-TRANSACTION  38 , which executes the BEGIN WORK command  53 .  Then
a SELECT command  39  is processed to determine whether the vendor number
exists in column VENDORNUMBER of table PURCHDB.VENDORS:

   *   If the number exists in table PURCHDB.VENDORS, the vendor number
       is valid.  A space is moved to VENDOR-FLAG, and the transaction is
       terminated by performing paragraph COMMIT-WORK  40 .  Paragraph
       COMMIT-WORK executes the COMMIT WORK command  54 .

   *   If the vendor number is not found, COMMIT WORK is executed and a
       message displayed to inform the user that the number entered is
       invalid  41 .  Several flags are set to X so that when control
       returns to paragraph CREATE-ORDER, the user is again prompted for
       a vendor number.

   *   If the SELECT command fails, paragraph SQL-STATUS-CHECK is
       performed  42  to display any error messages  51  before the
       transaction is terminated and the appropriate flags set.

If the vendor number is valid, COBEX9 performs paragraph CREATE-HEADER to
create the order header  10 .  The order header consists of a row
containing the vendor number entered, plus two values computed by the
program:  ORDERNUMBER and ORDERDATE.

Paragraph CREATE-HEADER starts a transaction  13 , then obtains an
exclusive lock on table PURCHDB.ORDERS  14 .  Exclusive access to this
table ensures that when the row is inserted, no row having the same
number will have been inserted by another transaction.  The unique index
that exists on column ORDERNUMBER prevents duplicate order numbers in
table PURCHDB.ORDERS. Therefore an INSERT operation fails if it attempts
to insert a row having an order number with a value already in column
ORDERNUMBER.

In this case, the exclusive lock does not threaten concurrency.  No
operations conducted between the time the lock is obtained and the time
it is released involve operator intervention:

   *   Paragraph CREATE-HEADER executes a SELECT command to retrieve the
       highest order number in PURCHDB.ORDERS  15 .  The number retrieved
       is incremented by one  16  to assign a number to the order.

   *   Paragraph CREATE-HEADER then moves the special register word
       CURRENT-DATE to variable TODAY  17 .  This variable is declared as
       an array  2  containing elements that can be concatenated to the
       YYYYMMDD format  18  in which ORDERDATE values are stored.

   *   Paragraph CREATE-HEADER then executes a simple INSERT command  19  
       to insert a row into PURCHDB.ORDERS. If the INSERT command
       succeeds, the transaction is terminated with a COMMIT WORK
       command, and a space is moved to HEADER-FLAG  20 .  If the INSERT
       command fails, the transaction is terminated with COMMIT WORK, but
       an X is moved to HEADER-FLAG  21  so that the user is prompted for
       another vendor number when control returns to paragraph
       CREATE-ORDER.

To create line items, paragraph CREATE-ORDER performs paragraph
CREATE-ORDER-ITEMS until the DONE-ITEMS-FLAG contains an X  11 .
CREATE-ORDER-ITEMS asks the user whether she wants to specify line items  
22 .

If the user wants to create line items, CREATE-ORDER-ITEMS performs
paragraph ITEM-ENTRY  through ITEM-ENTRY-EXIT until the DONE-ITEMS-FLAG 
contains an X  24 , then performs paragraph BULK-INSERT  25 :

   *   ITEM-ENTRY assigns values to host variable array ORDERITEMS  1 ;
       each row in the array corresponds to one line item, or row in
       table PURCHDB.ORDERITEMS. The paragraph first assigns the order
       number and a line number to each row  26 , beginning at one.
       ITEM-ENTRY then prompts for a vendor part number  27 , which is
       validated by performing paragraph VALIDATE-PART  28 .

       VALIDATE-PART starts a transaction  43 .  Then it executes a
       SELECT command  44  to determine whether the part number entered
       matches any part number known to be supplied by the vendor.  If
       the part number is valid, the COMMIT WORK command is executed  45  
       and a space moved to PART-FLAG. If the part number is invalid,
       COMMIT WORK is executed  46 , and the user informed that the
       vendor does not supply any part having the number specified; then
       an X is moved to PART-FLAG so that the user is prompted for
       another part number when control returns to paragraph ITEM-ENTRY.

       If the part number is valid, paragraph ITEM-ENTRY completes the
       line item.  It prompts for values to assign to columns
       PURCHASEPRICE, ORDERQTY, and ITEMDUEDATE  29 .  The paragraph then
       assigns a negative value to the indicator variable for column
       RECEIVEDQTY  30  in preparation for inserting a null value into
       this column.

       ITEM-ENTRY terminates when the user indicates that she does not
       want to specify any more line items  32  or when the host variable
       array is full  31 .

   *   Paragraph BULK-INSERT starts a transaction  33 , then executes the
       BULK INSERT command  35 .  The line items in array ORDERITEMS are
       inserted into table PURCHDB.ORDERITEMS, starting with the first
       row in the array and continuing for as many rows as there were
       line items specified  34 .  If the BULK INSERT command succeeds,
       the COMMIT WORK command is executed  36  and a space moved to
       ITEMS-FLAG. If the BULK INSERT command fails, paragraph
       ROLLBACK-WORK is executed  37  to process the ROLLBACK WORK
       command  55  so that any rows inserted prior to the failure are
       rolled back.

If the user does not want to create line items, paragraph
CREATE-ORDER-ITEMS displays the order header by performing paragraph
DISPLAY-HEADER  23 .  DISPLAY-HEADER displays the row inserted earlier in
PURCHDB.ORDERS  49 .

If line items were inserted into PURCHDB.ORDERITEMS, paragraph
DISPLAY-ORDER is performed  12  to display the order created.
DISPLAY-ORDER performs paragraph DISPLAY-HEADER  47  to display the order
header.  Then it performs paragraph DISPLAY-ITEMS  48  to display each
row inserted into PURCHDB.ORDERITEMS. DISPLAY-ITEMS displays values from
array ORDERITEMS  50 .

When the program user enters a zero in response to the vendor number
prompt, the program terminates by performing paragraph TERMINATE-PROGRAM  
5 , which executes the RELEASE command  6 .

	       Click here to view figure.
          Figure 9-1.  Flow Chart of Program COBEX9 
_________________________________________________________
|                                                       |
|     :RUN COBEX9P                                      |
|     Program to Create an Order - COBEX9               |
|     Event List:                                       |
|       Connect to PartsDBE                             |
|       Prompt for VendorNumber                         |
|       Validate VendorNumber                           |
|       INSERT a row into PurchDB.Orders                |
|       Prompt for line items                           |
|       Validate VendPartNumber for each line item      |
|       BULK INSERT rows into PurchDB.OrderItems        |
|       Repeat the above six steps until user enters 0  |
|       Release PartsDBE                                |
|                                                       |
|     Connect to PartsDBE                               |
|                                                       |
|     Enter VendorNumber or 0 to STOP> 9015             |
|                                                       |
|     Begin Work                                        |
|     Validating VendorNumber                           |
|     Commit Work                                       |
|                                                       |
|     Begin Work                                        |
|     Calculating OrderNumber                           |
|     Calculating OrderDate                             |
|     INSERT INTO PurchDB.Orders                        |
|     Commit Work                                       |
|                                                       |
|     Do you want to specify line items (Y/N)?> y       |
|                                                       |
|     You can specify as many as 25 line items.         |
|                                                       |
|     Enter data for ItemNumber      1:                 |
|      VendPartNumber> 9040                             |
|                                                       |
|     Begin Work                                        |
|     Validating VendPartNumber                         |
|     Commit Work                                       |
|                                                       |
|      PurchasePrice> 1500                              |
|      OrderQty> 5                                      |
|      ItemDueDate (YYYYMMDD)> 19870630                 |
|                                                       |
|     Do you want to specify another line item (Y/N)?> y|
|                                                       |
|     You can specify as many as 25 line items.         |
|                                                       |
|     Enter data for ItemNumber      2:                 |
|      VendPartNumber> 9055                             |
_________________________________________________________

          Figure 9-2.  Execution of Program COBEX9 
____________________________________________________________
|                                                          |
|     Begin Work                                           |
|     Validating VendPartNumber                            |
|     Commit Work                                          |
|                                                          |
|     The vendor has no part with the number you specified.|
|                                                          |
|     You can specify as many as 25 line items.            |
|                                                          |
|     Enter data for ItemNumber      2:                    |
|      VendPartNumber> 9050                                |
|                                                          |
|     Begin Work                                           |
|     Validating VendPartNumber                            |
|     Commit Work                                          |
|                                                          |
|      PurchasePrice> 345                                  |
|      OrderQty> 2                                         |
|      ItemDueDate (YYYYMMDD)> 19870801                    |
|                                                          |
|     Do you want to specify another line item (Y/N)?> n   |
|                                                          |
|     Begin Work                                           |
|     BULK INSERT INTO PurchDB.OrderItems                  |
|     Commit Work                                          |
|                                                          |
|     The following order has been created:                |
|                                                          |
|      OrderNumber:    30538                               |
|      VendorNumber:    9015                               |
|      OrderDate:     19870603                             |
|                                                          |
|      ItemNumber:           1                             |
|        VendPartNumber:  9040                             |
|        PurchasePrice:        $1,500.00                   |
|        OrderQty:             5                           |
|        ItemDueDate:     19870630                         |
|        ReceivedQty:     NULL                             |
|                                                          |
|      ItemNumber:           2                             |
|        VendPartNumber:  9050                             |
|        PurchasePrice:          $345.00                   |
|        OrderQty:             2                           |
|        ItemDueDate:     19870801                         |
|        ReceivedQty:     NULL                             |
|                                                          |
|     Enter VendorNumber or 0 to STOP> 0                   |
|      END OF PROGRAM                                      |
____________________________________________________________

          Figure 9-2.  Execution of Program COBEX9 (page 2 of 2) 
_____________________________________________________________________________
|                                                                           |
|                                                                           |
|           * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|           * This program illustrates the use of BULK INSERT             * |
|           * to insert multiple rows at a time.                          * |
|           * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|            IDENTIFICATION DIVISION.                                       |
|            PROGRAM-ID.             COBEX9.                                |
|            AUTHOR.                 JIM FRANCIS AND KAREN THOMAS.          |
|            INSTALLATION.           HP.                                    |
|            DATE-WRITTEN.           20 MAY 1987.                           |
|            DATE-COMPILED.          20 MAY 1987.                           |
|            REMARKS.                ILLUSTRATES BULK INSERT.               |
|            ENVIRONMENT DIVISION.                                          |
|            CONFIGURATION SECTION.                                         |
|            SOURCE-COMPUTER.        HP-3000.                               |
|            OBJECT-COMPUTER.        HP-3000.                               |
|            SPECIAL-NAMES.          CONSOLE IS TERMINAL-INPUT.             |
|            INPUT-OUTPUT SECTION.                                          |
|            FILE-CONTROL.                                                  |
|                SELECT CRT ASSIGN TO "$STDLIST".                           |
|            DATA DIVISION.                                                 |
|            FILE SECTION.                                                  |
|            FD CRT.                                                        |
|            01  PROMPT                  PIC X(33).                         |
|            01  PROMPT1                 PIC X(42).                         |
|            01  PROMPT2                 PIC X(17).                         |
|            01  PROMPT3                 PIC X(16).                         |
|            01  PROMPT4                 PIC X(11).                         |
|            01  PROMPT5                 PIC X(25).                         |
|            01  PROMPT6                 PIC X(49).                         |
|            WORKING-STORAGE SECTION.                                       |
|                                                                           |
|            EXEC SQL INCLUDE SQLCA END-EXEC.                               |
|           * * * * * *   BEGIN HOST VARIABLE DECLARATIONS  * * * * * * *   |
|            EXEC SQL BEGIN DECLARE SECTION END-EXEC.                       |
|            01  ORDERNUMBER1            PIC S9(9) COMP.                    |
|            01  VENDORNUMBER            PIC S9(9) COMP.                    |
|            01  ORDERDATE               PIC X(8).                          |
|            01  PARTSPECIFIED           PIC X(16).                         |
|            01  MAXORDERNUMBER          PIC S9(9) COMP.                    |
|            01  ORDERITEMS.                                              1 |
|              05  EACH-ROW OCCURS 25 TIMES.                                |
|                10  ORDERNUMBER2            PIC S9(9) COMP.                |
|                10  ITEMNUMBER              PIC S9(9) COMP.                |
|                10  VENDPARTNUMBER          PIC X(16).                     |
|                10  PURCHASEPRICE           PIC S9(8)V99 COMP-3.           |
|                10  ORDERQTY                PIC S9(4) COMP.                |
|                10  ITEMDUEDATE             PIC X(8).                      |
_____________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT 
__________________________________________________________________________
|                                                                        |
|                10  RECEIVEDQTY             PIC S9(4) COMP.             |
|                10  RECEIVEDQTYIND          SQLIND.                     |
|            01  STARTINDEX              PIC S9(4) COMP.                 |
|            01  NUMBEROFROWS            PIC S9(4) COMP.                 |
|                                                                        |
|            01  SQLMESSAGE              PIC X(132).                     |
|            EXEC SQL END DECLARE SECTION END-EXEC.                      |
|           * * * * * *   END OF HOST VARIABLE DECLARATIONS * * * * * * *|
|           $PAGE                                                        |
|            77   DONE-FLAG              PIC X VALUE SPACE.              |
|              88    NOT-DONE            VALUE SPACE.                    |
|              88    DONE                VALUE "X".                      |
|                                                                        |
|            77   DONE-ITEMS-FLAG        PIC X VALUE SPACE.              |
|              88    NOT-DONE-ITEMS      VALUE SPACE.                    |
|              88    DONE-ITEMS          VALUE "X".                      |
|                                                                        |
|            77   VENDOR-FLAG            PIC X VALUE SPACE.              |
|              88    VENDOR-OK           VALUE SPACE.                    |
|              88    VENDOR-NOT-OK       VALUE "X".                      |
|                                                                        |
|            77   HEADER-FLAG            PIC X VALUE SPACE.              |
|              88    HEADER-OK           VALUE SPACE.                    |
|              88    HEADER-NOT-OK       VALUE "X".                      |
|                                                                        |
|            77   PART-FLAG              PIC X VALUE SPACE.              |
|              88    PART-OK             VALUE SPACE.                    |
|              88    PART-NOT-OK         VALUE "X".                      |
|                                                                        |
|            77   ITEMS-FLAG             PIC X VALUE SPACE.              |
|              88    ITEMS-OK            VALUE SPACE.                    |
|              88    ITEMS-NOT-OK        VALUE "X".                      |
|                                                                        |
|            77  ABORT-FLAG              PIC X VALUE SPACE.              |
|              88  NOT-STOP              VALUE SPACE.                    |
|              88  ABORT                 VALUE "X".                      |
|                                                                        |
|            01  I                       PIC S9(4) COMP.                 |
|            01  J                       PIC S9(4) COMP.                 |
|            01  OK                      PIC S9(9) COMP VALUE      0.    |
|            01  NOTFOUND                PIC S9(9) COMP VALUE    100.    |
|            01  DEADLOCK                PIC S9(9) COMP VALUE -14024.    |
|                                                                        |
|            01  RESPONSE                PIC S9(9) COMP VALUE 0.         |
|            01  RESPONSE1               PIC X(4)       VALUE SPACE.     |
|                                                                        |
|            01  ORDERNUMFORMAT         PIC ZZZZZ9.                      |
|            01  VENDORNUMFORMAT        PIC ZZZZZ9.                      |
__________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 2 of 10) 
_____________________________________________________________________________
|                                                                           |
|            01  ITEMNUMFORMAT          PIC ZZZZZ9.                         |
|            01  QTYNUMFORMAT           PIC ZZZZZ9.                         |
|            01  DOLLARS                PIC $$$,$$$,$$$.99.                 |
|            01  TODAY.                                                   2 |
|              05  TMONTH              PIC X(2).                            |
|              05  FILLER              PIC X(1).                            |
|              05  TDAY                PIC X(2).                            |
|              05  FILLER              PIC X(1).                            |
|              05  TYEAR               PIC X(2).                            |
|           $PAGE                                                           |
|            PROCEDURE DIVISION.                                            |
|                                                                           |
|            BEGIN.                                                         |
|                                                                           |
|                DISPLAY "Program to Create an Order - COBEX9".             |
|                DISPLAY " ".                                               |
|                DISPLAY "Event List:".                                     |
|                DISPLAY "  Connect to PartsDBE".                           |
|                DISPLAY "  Prompt for VendorNumber".                       |
|                DISPLAY "  Validate VendorNumber".                         |
|                DISPLAY "  INSERT a row into PurchDB.Orders".              |
|                DISPLAY "  Prompt for line items".                         |
|                DISPLAY "  Validate VendPartNumber for each line item".    |
|                DISPLAY "  BULK INSERT rows into PurchDB.OrderItems".      |
|                DISPLAY "  Repeat the above six steps until "              |
|                        "user enters 0".                                   |
|                DISPLAY "  Release PartsDBE".                              |
|                DISPLAY " ".                                               |
|                                                                           |
|                                                                           |
|                OPEN OUTPUT CRT.                                           |
|                                                                           |
|                PERFORM CONNECT-DBENVIRONMENT.                           3 |
|                                                                           |
|                PERFORM CREATE-ORDER THRU CREATE-ORDER-EXIT UNTIL DONE.  4 |
|                                                                           |
|                PERFORM TERMINATE-PROGRAM.                               5 |
|                                                                           |
|            TERMINATE-PROGRAM.                                             |
|                                                                           |
|                EXEC SQL RELEASE END-EXEC.                               6 |
|                                                                           |
|                STOP RUN.                                                  |
|                                                                           |
|            CREATE-ORDER.                                                  |
|                                                                           |
|                MOVE SPACES TO DONE-ITEMS-FLAG.                            |
|                MOVE "Enter VendorNumber or 0 to STOP> " TO PROMPT.      7 |
_____________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 3 of 10) 
______________________________________________________________________________
|                                                                            |
|                WRITE PROMPT AFTER ADVANCING 1 LINE.                        |
|                ACCEPT RESPONSE FREE.                                       |
|                IF RESPONSE IS ZERO THEN                                 8  |
|                   MOVE "X" TO DONE-FLAG                                    |
|                   GO TO CREATE-ORDER-EXIT                                  |
|                ELSE                                                        |
|                   MOVE RESPONSE TO VENDORNUMBER.                           |
|                                                                            |
|                PERFORM VALIDATE-VENDOR.                                 9  |
|                                                                            |
|                IF VENDOR-OK THEN PERFORM CREATE-HEADER.                 10 |
|                                                                            |
|                IF HEADER-OK THEN                                           |
|                   PERFORM CREATE-ORDER-ITEMS UNTIL DONE-ITEMS.          11 |
|                                                                            |
|                IF ITEMS-OK THEN PERFORM DISPLAY-ORDER.                  12 |
|                                                                            |
|            CREATE-ORDER-EXIT.                                              |
|                                                                            |
|                EXIT.                                                       |
|                                                                            |
|            CREATE-HEADER.                                                  |
|                                                                            |
|                DISPLAY " ".                                                |
|                DISPLAY "Begin Work".                                       |
|                                                                            |
|                PERFORM BEGIN-TRANSACTION.                               13 |
|                                                                            |
|                EXEC SQL LOCK TABLE PURCHDB.ORDERS                       14 |
|                           IN EXCLUSIVE MODE                                |
|                END-EXEC.                                                   |
|                                                                            |
|                IF SQLCODE NOT = OK THEN                                    |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE "X" TO HEADER-FLAG                                  |
|                   GO TO CREATE-HEADER-EXIT.                                |
|                                                                            |
|                EXEC SQL SELECT  MAX(ORDERNUMBER)                        15 |
|                           INTO :MAXORDERNUMBER                             |
|                           FROM  PURCHDB.ORDERS                             |
|                END-EXEC.                                                   |
|                                                                            |
|                IF SQLCODE NOT = OK THEN                                    |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE "X" TO HEADER-FLAG                                  |
|                   GO TO CREATE-HEADER-EXIT.                                |
______________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 4 of 10) 
______________________________________________________________________________
|                                                                            |
|                DISPLAY "Calculating OrderNumber".                          |
|                                                                            |
|                COMPUTE ORDERNUMBER1 = MAXORDERNUMBER + 1.               16 |
|                DISPLAY "Calculating OrderDate".                            |
|                MOVE CURRENT-DATE TO TODAY.                              17 |
|                                                                            |
|                STRING "19", TYEAR, TMONTH, TDAY                         18 |
|                  DELIMITED BY SIZE INTO ORDERDATE.                         |
|                                                                            |
|                DISPLAY "INSERT INTO PurchDB.Orders".                       |
|                EXEC SQL INSERT INTO   PURCHDB.ORDERS                    19 |
|                                     ( ORDERNUMBER,                         |
|                                       VENDORNUMBER,                        |
|                                       ORDERDATE )                          |
|                              VALUES (:ORDERNUMBER1,                        |
|                                      :VENDORNUMBER,                        |
|                                      :ORDERDATE )                          |
|                END-EXEC.                                                   |
|                                                                            |
|                IF SQLCODE = OK THEN                                     20 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE SPACE TO HEADER-FLAG                                |
|                ELSE                                                        |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE "X" TO HEADER-FLAG.                              21 |
|                                                                            |
|            CREATE-HEADER-EXIT.                                             |
|                EXIT.                                                       |
|                                                                            |
|            CREATE-ORDER-ITEMS.                                             |
|                                                                            |
|                MOVE "Do you want to specify line items (Y/N)?> "        22 |
|                     TO PROMPT1.                                            |
|                MOVE SPACE TO RESPONSE1.                                    |
|                WRITE PROMPT1 AFTER ADVANCING 1 LINE.                       |
|                ACCEPT RESPONSE1.                                           |
|                                                                            |
|                IF RESPONSE1 = "N" OR "n" THEN                              |
|                   MOVE "X" TO DONE-ITEMS-FLAG                              |
|                   MOVE "X" TO ITEMS-FLAG                                   |
|                   PERFORM DISPLAY-HEADER                                23 |
|                ELSE                                                        |
|                   MOVE 1 TO I                                              |
|                   PERFORM ITEM-ENTRY THRU ITEM-ENTRY-EXIT               24 |
|                     UNTIL DONE-ITEMS                                       |
|                   PERFORM BULK-INSERT.                                  25 |
|                                                                            |
______________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 5 of 10) 
_______________________________________________________________________________
|                                                                             |
|            ITEM-ENTRY.                                                      |
|                MOVE ORDERNUMBER1 TO ORDERNUMBER2(I).                    26  |
|                MOVE I TO ITEMNUMBER(I).                                     |
|                MOVE I TO ITEMNUMFORMAT.                                     |
|                DISPLAY " ".                                                 |
|                DISPLAY "You can specify as many as 25 line items.".         |
|                DISPLAY " ".                                                 |
|                DISPLAY "Enter data for ItemNumber " ITEMNUMFORMAT ":".      |
|                                                                             |
|                MOVE " VendPartNumber> " TO PROMPT2.                     27  |
|                WRITE PROMPT2 AFTER ADVANCING 1 LINE.                        |
|                MOVE SPACES TO VENDPARTNUMBER(I).                            |
|                ACCEPT VENDPARTNUMBER(I).                                    |
|                                                                             |
|                PERFORM VALIDATE-PART.                                   28  |
|                                                                             |
|                IF PART-OK THEN                                              |
|                                                                             |
|                   MOVE " PurchasePrice> " TO PROMPT3                    29  |
|                   WRITE PROMPT3 AFTER ADVANCING 1 LINE                      |
|                   ACCEPT PURCHASEPRICE(I) FREE                              |
|                                                                             |
|                   MOVE " OrderQty> " TO PROMPT4                             |
|                   WRITE PROMPT4 AFTER ADVANCING 0 LINES                     |
|                   ACCEPT ORDERQTY(I) FREE                                   |
|                                                                             |
|                   MOVE " ItemDueDate (YYYYMMDD)> " TO PROMPT5               |
|                   WRITE PROMPT5 AFTER ADVANCING 0 LINES                     |
|                   MOVE SPACES TO ITEMDUEDATE(I)                             |
|                   ACCEPT ITEMDUEDATE(I)                                     |
|                                                                             |
|                   MOVE -1 TO RECEIVEDQTYIND(I)                          30  |
|                                                                             |
|                   IF I = 25 THEN                                        31  |
|                     MOVE "X" TO DONE-ITEMS-FLAG                             |
|                     GO TO ITEM-ENTRY-EXIT                                   |
|                   ELSE                                                      |
|                     DISPLAY " "                                             |
|                     MOVE "Do you want to specify another line item (Y/N)?> "|
|                       TO PROMPT6                                            |
|                     MOVE SPACE TO RESPONSE1                                 |
|                     WRITE PROMPT6 AFTER ADVANCING 1 LINE                    |
|                     ACCEPT RESPONSE1                                        |
|                                                                             |
|                     IF RESPONSE1 = "N" OR "n" THEN                      32  |
|                        MOVE "X" TO DONE-ITEMS-FLAG                          |
|                     ELSE                                                    |
|                        COMPUTE I = I + 1.                                   |
_______________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 6 of 10) 
______________________________________________________________________________
|                                                                            |
|            ITEM-ENTRY-EXIT.                                                |
|                                                                            |
|                EXIT.                                                       |
|                                                                            |
|            BULK-INSERT.                                                    |
|                DISPLAY " ".                                                |
|                DISPLAY "Begin Work".                                       |
|                PERFORM BEGIN-TRANSACTION.                               33 |
|                                                                            |
|                MOVE I TO NUMBEROFROWS.                                  34 |
|                MOVE 1 TO STARTINDEX.                                       |
|                                                                            |
|                DISPLAY "BULK INSERT INTO PurchDB.OrderItems".              |
|                EXEC SQL BULK INSERT INTO   PURCHDB.ORDERITEMS           35 |
|                                          ( ORDERNUMBER,                    |
|                                            ITEMNUMBER,                     |
|                                            VENDPARTNUMBER,                 |
|                                            PURCHASEPRICE,                  |
|                                            ORDERQTY,                       |
|                                            ITEMDUEDATE,                    |
|                                            RECEIVEDQTY )                   |
|                                   VALUES (:ORDERITEMS,                     |
|                                           :STARTINDEX,                     |
|                                           :NUMBEROFROWS)                   |
|                END-EXEC.                                                   |
|                                                                            |
|                IF SQLCODE = OK THEN                                     36 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE SPACE TO ITEMS-FLAG                                 |
|                ELSE                                                        |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM ROLLBACK-WORK                                 37 |
|                   MOVE "X" TO ITEMS-FLAG.                                  |
|                                                                            |
|                                                                            |
|            VALIDATE-VENDOR.                                                |
|                DISPLAY " ".                                                |
|                DISPLAY "Begin Work".                                       |
|                DISPLAY "Validating VendorNumber".                          |
|                                                                            |
|                PERFORM BEGIN-TRANSACTION.                               38 |
|                                                                            |
|                EXEC SQL SELECT  VENDORNUMBER                            39 |
|                           INTO :VENDORNUMBER                               |
|                           FROM  PURCHDB.VENDORS                            |
|                          WHERE  VENDORNUMBER = :VENDORNUMBER               |
|                END-EXEC.                                                   |
|                                                                            |
______________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 7 of 10) 
______________________________________________________________________________
|                                                                            |
|                IF SQLCODE = OK THEN                                     40 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE SPACE TO VENDOR-FLAG                                |
|                ELSE                                                        |
|                IF SQLCODE = NOTFOUND                                    41 |
|                   PERFORM COMMIT-WORK                                      |
|                   DISPLAY " "                                              |
|                   DISPLAY "No vendor has the VendorNumber you specified."  |
|                   MOVE "X" TO VENDOR-FLAG                                  |
|                   MOVE "X" TO HEADER-FLAG                                  |
|                   MOVE "X" TO ITEMS-FLAG                                   |
|                ELSE                                                        |
|                   PERFORM SQL-STATUS-CHECK                              42 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE "X" TO VENDOR-FLAG                                  |
|                   MOVE "X" TO HEADER-FLAG                                  |
|                   MOVE "X" TO ITEMS-FLAG.                                  |
|                                                                            |
|            VALIDATE-PART.                                                  |
|                DISPLAY " ".                                                |
|                DISPLAY "Begin Work".                                       |
|                DISPLAY "Validating VendPartNumber".                        |
|                                                                            |
|                PERFORM BEGIN-TRANSACTION.                               43 |
|                                                                            |
|                MOVE VENDPARTNUMBER(I) TO PARTSPECIFIED.                    |
|                EXEC SQL SELECT  VENDPARTNUMBER                          44 |
|                           INTO :PARTSPECIFIED                              |
|                           FROM  PURCHDB.SUPPLYPRICE                        |
|                          WHERE  VENDORNUMBER   = :VENDORNUMBER             |
|                            AND  VENDPARTNUMBER = :PARTSPECIFIED            |
|                END-EXEC.                                                   |
|                                                                            |
|                IF SQLCODE = OK THEN                                     45 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE SPACE TO PART-FLAG                                  |
|                ELSE                                                        |
|                IF SQLCODE = NOTFOUND                                    46 |
|                   PERFORM COMMIT-WORK                                      |
|                   DISPLAY " "                                              |
|                   DISPLAY "The vendor has no part "                        |
|                         "with the number you specified."                   |
|                   MOVE "X" TO PART-FLAG                                    |
|                ELSE                                                        |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM COMMIT-WORK                                      |
|                   MOVE "X" TO PART-FLAG.                                   |
|                                                                            |
______________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 8 of 10) 
______________________________________________________________________________
|                                                                            |
|            DISPLAY-ORDER.                                                  |
|                                                                            |
|                PERFORM DISPLAY-HEADER.                                  47 |
|                DISPLAY " ".                                                |
|                PERFORM DISPLAY-ITEMS VARYING J FROM 1 BY 1 UNTIL J > I. 48 |
|                                                                            |
|            DISPLAY-HEADER.                                              49 |
|                                                                            |
|                DISPLAY " ".                                                |
|                                                                            |
|                DISPLAY "The following order has been created:"             |
|                DISPLAY " ".                                                |
|                                                                            |
|                MOVE ORDERNUMBER1 TO ORDERNUMFORMAT                         |
|                DISPLAY " OrderNumber:   " ORDERNUMFORMAT.                  |
|                                                                            |
|                MOVE VENDORNUMBER TO VENDORNUMFORMAT.                       |
|                DISPLAY " VendorNumber:  " VENDORNUMFORMAT.                 |
|                                                                            |
|                DISPLAY " OrderDate:     " ORDERDATE.                       |
|                                                                            |
|                                                                            |
|            DISPLAY-ITEMS.                                               50 |
|                                                                            |
|                DISPLAY " ".                                                |
|                MOVE ITEMNUMBER(J) TO ITEMNUMFORMAT.                        |
|                DISPLAY " ItemNumber:      " ITEMNUMFORMAT.                 |
|                DISPLAY "   VendPartNumber:  " VENDPARTNUMBER(J).           |
|                MOVE PURCHASEPRICE(J) TO DOLLARS.                           |
|                DISPLAY "   PurchasePrice:   " DOLLARS.                     |
|                MOVE ORDERQTY(J) TO QTYNUMFORMAT.                           |
|                DISPLAY "   OrderQty:        " QTYNUMFORMAT.                |
|                DISPLAY "   ItemDueDate:     " ITEMDUEDATE(J).              |
|                DISPLAY "   ReceivedQty:     NULL".                         |
|                                                                            |
|                                                                            |
|            SQL-STATUS-CHECK.                                            51 |
|                                                                            |
|                IF SQLCODE < DEADLOCK THEN                                  |
|                   MOVE "X" TO ABORT-FLAG.                                  |
|                                                                            |
|                PERFORM SQLEXPLAIN UNTIL SQLCODE = 0.                       |
|                                                                            |
|                IF ABORT THEN PERFORM TERMINATE-PROGRAM.                    |
|                                                                            |
|            SQL-STATUS-CHECK-EXIT.                                          |
|                                                                            |
|                EXIT.                                                       |
______________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 9 of 10) 
______________________________________________________________________________
|                                                                            |
|            SQLEXPLAIN.                                                     |
|                                                                            |
|                EXEC SQL SQLEXPLAIN :SQLMESSAGE END-EXEC.                   |
|                                                                            |
|                DISPLAY SQLMESSAGE.                                         |
|            CONNECT-DBENVIRONMENT.                                          |
|                                                                            |
|                DISPLAY "Connect to PartsDBE".                              |
|                                                                            |
|                EXEC SQL CONNECT TO "PartsDBE" END-EXEC.                 52 |
|                                                                            |
|                IF SQLCODE NOT = OK THEN                                    |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM TERMINATE-PROGRAM.                               |
|                                                                            |
|            BEGIN-TRANSACTION.                                              |
|                                                                            |
|                EXEC SQL BEGIN WORK END-EXEC.                            53 |
|                                                                            |
|                IF SQLCODE NOT = OK THEN                                    |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM TERMINATE-PROGRAM.                               |
|                                                                            |
|            COMMIT-WORK.                                                    |
|                                                                            |
|                DISPLAY "Commit Work".                                      |
|                                                                            |
|                EXEC SQL COMMIT WORK END-EXEC.                           54 |
|                                                                            |
|                IF SQLCODE NOT = OK THEN                                    |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM TERMINATE-PROGRAM.                               |
|                                                                            |
|            ROLLBACK-WORK.                                                  |
|                                                                            |
|                DISPLAY "Rollback Work".                                    |
|                                                                            |
|                EXEC SQL ROLLBACK WORK END-EXEC.                         55 |
|                                                                            |
|                IF SQLCODE NOT = OK THEN                                    |
|                   PERFORM SQL-STATUS-CHECK                                 |
|                   PERFORM TERMINATE-PROGRAM.                               |
______________________________________________________________________________

          Figure 9-3.  Program COBEX9:  Using BULK INSERT (page 10 of 10) 



MPE/iX 5.0 Documentation