* Copyright © Oracle Corporation 1995. All Rights Reserved. IDENTIFICATION DIVISION. PROGRAM-ID. RDB_ADD_EAST INITIAL. * * This subprogram is called by the program SQL$DIST_TRANS.COB. It * calls SQL module procedures to add an employee to the east database, * an Oracle Rdb database. * DATA DIVISION. WORKING-STORAGE SECTION. * * Control variables 01 INPUT-COMPLETE PIC X VALUE "N". 88 CONFIRMED VALUES "y" "Y". 01 DATE-CHECK PIC X VALUE "N". 88 VALID-DATE VALUE "Y". * * Declare the employee record for input data. 01 IN-EMP-INFO. 05 EMPLOYEE-ID PIC X(5). 05 LAST-NAME PIC X(14). 05 FIRST-NAME PIC X(10). 05 MIDDLE-INITIAL PIC X. 05 ADDRESS-DATA-1 PIC X(25). 05 ADDRESS-DATA-2 PIC X(20). 05 CITY PIC X(20). 05 STATE PIC X(2). 05 POSTAL-CODE PIC X(5). 05 SEX PIC X. 05 BIRTHDAY PIC X(8). 05 STATUS-CODE PIC X. 01 ASCII-DATE PIC X(23). * * Declare the SQLCODE. 01 SQLCODE PIC S9(9) COMP. * * Declare the context structure. 01 CONTEXT. 05 CONTEXT-VERSION PIC 9(9) COMP. 05 CONTEXT-TYPE PIC 9(9) COMP. 05 CONTEXT-LENGTH PIC 9(9) COMP. 05 CONTEXT-TID. 10 LOW_DATE PIC 9(9) COMP. 10 HIGH_DATE PIC 9(9) COMP. 10 DATE_INCARN PIC 9(4) COMP. 10 NODE_ID PIC 9(4) COMP. 10 NODE_IDH PIC 9(9) COMP. 05 CONTEXT-END PIC 9(9) COMP. * * Declare the variables needed for the system service calls. 01 RET-STATUS PIC S9(9) COMP. LINKAGE SECTION. * * Employee information collected in this program for return to * the program SQL$DIST_TRANS. 01 EMP-INFO. 05 EMPLOYEE-ID PIC X(5). 05 LAST-NAME PIC X(14). 05 FIRST-NAME PIC X(10). * * The distributed TID from SQL$DIST_TRANS to be passed to SQL. 01 TID. 05 LOW_DATE PIC 9(9) COMP. 05 HIGH_DATE PIC 9(9) COMP. 05 DATE_INCARN PIC 9(4) COMP. 05 NODE_ID PIC 9(4) COMP. 05 NODE_IDH PIC 9(9) COMP. PROCEDURE DIVISION USING EMP-INFO, TID. MAIN-SECTION. * * Initialize the context structure. MOVE 1 TO CONTEXT-VERSION. MOVE 1 TO CONTEXT-TYPE. MOVE 16 TO CONTEXT-LENGTH. MOVE CORRESPONDING TID TO CONTEXT-TID. MOVE ZERO TO CONTEXT-END. * * Get the employee data. PERFORM GET-EMP-INFO THRU GET-EMP-INFO-EXIT UNTIL CONFIRMED. * * Call the SQL module procedure START_EAST to start the transaction. CALL "START_EAST" USING SQLCODE, CONTEXT. IF SQLCODE LESS THAN ZERO THEN CALL "SQL$DIST_TRANS_ERROR" USING TID, SQLCODE. * * Call the SQL module procedure INSERT_EAST to insert the employee * record. DISPLAY "". DISPLAY "Storing the row in 2pceast database". CALL "INSERT_EAST" USING SQLCODE, IN-EMP-INFO, CONTEXT. IF SQLCODE LESS THAN ZERO THEN CALL "SQL$DIST_TRANS_ERROR" USING TID, SQLCODE. MOVE CORRESPONDING IN-EMP-INFO TO EMP-INFO. EXIT PROGRAM. / GET-EMP-INFO. * * Prompt the user for input and accept the input. MOVE "N" TO DATE-CHECK. DISPLAY "". * A null value here will cause a constraint violation. DISPLAY "$ Please enter the ID of the employee: " WITH NO ADVANCING. ACCEPT EMPLOYEE-ID OF IN-EMP-INFO. DISPLAY "$ Please enter the employee's last name: " WITH NO ADVANCING. ACCEPT LAST-NAME OF IN-EMP-INFO. DISPLAY "$ Please enter the employee's first name: " WITH NO ADVANCING. ACCEPT FIRST-NAME OF IN-EMP-INFO. DISPLAY "$ Please enter the employee's middle initial: " WITH NO ADVANCING. ACCEPT MIDDLE-INITIAL OF IN-EMP-INFO. * Values other than "M", "F", "?" will cause a constraint violation. DISPLAY "$ Please enter the employee's sex: " WITH NO ADVANCING. ACCEPT SEX OF IN-EMP-INFO. PERFORM GET-BIRTHDATE THRU GET-BIRTHDATE-EXIT UNTIL VALID-DATE. DISPLAY "$ Please enter the employee's street address: " WITH NO ADVANCING. ACCEPT ADDRESS-DATA-1 OF IN-EMP-INFO. DISPLAY "$ Please enter the employee's apartment number: " WITH NO ADVANCING. ACCEPT ADDRESS-DATA-2 OF IN-EMP-INFO. DISPLAY "$ Please enter the city: " WITH NO ADVANCING. ACCEPT CITY OF IN-EMP-INFO. DISPLAY "$ Please enter the state: " WITH NO ADVANCING. ACCEPT STATE OF IN-EMP-INFO. DISPLAY "$ Please enter the postal code: " WITH NO ADVANCING. ACCEPT POSTAL-CODE OF IN-EMP-INFO. * Values other than "0", "1", "2", "N" will cause a constraint violation. DISPLAY "$ Please enter the employee's status: " WITH NO ADVANCING. ACCEPT STATUS-CODE OF IN-EMP-INFO. DISPLAY "$Have you entered all data correctly? (Y/N): " WITH NO ADVANCING. ACCEPT INPUT-COMPLETE. GET-EMP-INFO-EXIT. EXIT. GET-BIRTHDATE. * * Get the birthdate in ascii and convert it to binary for storage. DISPLAY "$ Please enter the employee's birthdate (dd-MMM-yyyy): " WITH NO ADVANCING. ACCEPT ASCII-DATE. CALL "SYS$BINTIM" USING BY DESCRIPTOR ASCII-DATE, BY REFERENCE BIRTHDAY GIVING RET-STATUS. IF RET-STATUS IS NOT FAILURE THEN MOVE "Y" TO DATE-CHECK ELSE DISPLAY "Invalid date format" BELL. GET-BIRTHDATE-EXIT. EXIT.