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 “Execution of Program COBEX9”, and the
source code in Figure 9-3 “Program COBEX9: Using BULK INSERT ”.
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 .
Figure 9-1 Flow Chart of Program COBEX9
Figure 9-2 Execution 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
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-3 Program COBEX9: Using BULK INSERT
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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).
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.
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
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.
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
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.
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.
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.
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.
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.
|