Program Using SELECT, UPDATE, DELETE, and INSERT [ ALLBASE/SQL FORTRAN Application Programming Guide ] MPE/iX 5.0 Documentation
ALLBASE/SQL FORTRAN Application Programming Guide
Program Using SELECT, UPDATE, DELETE, and INSERT
The flow chart shown in Figure 7-1 summarizes the functionality of
program forex7, which uses the four simple data manipulation commands to
operate on the PurchDB.Vendors table. Forex7 uses a function menu to
determine whether to execute one or more SELECT, UPDATE, DELETE, or
INSERT operations. Each execution of a simple data manipulation command
is done in a separate transaction.
The runtime dialog for program forex7 appears in Figure 7-2, and the
source code in Figure 7-3.
The main program 1 first calls function ConnectDBE 3 to start a DBE
session. This function executes the CONNECT command for the sample
DBEnvironment, PartsDBE. The main program then displays a menu of
selections. The next operation performed depends on the number entered
in response to this menu:
* The program terminates if 0 is entered.
* Function Select is executed if 1 is entered.
* Function Update is executed if 2 is entered.
* Function Delete is executed if 3 is entered.
* Function Insert is executed if 4 is entered.
Select Function
Function Select 10 prompts for a vendor number or a zero. If a zero is
entered, the function menu is re-displayed. If a vendor number is
entered, subroutine BeginTransaction 5 is executed to issue the BEGIN
WORK command. Then a SELECT command is executed to retrieve all data for
the vendor specified from PurchDB.Vendors. The SQLCode returned is
examined to determine the next action:
* If no rows qualify for the SELECT operation, a message is
displayed and subroutine CommitWork 6 terminates the transaction
by executing the COMMIT WORK command. The user is then
re-prompted for a vendor number or a zero.
* If more than one row qualifies for the SELECT operation, a
different message is displayed and subroutine CommitWork 6
terminates the transaction by executing the COMMIT WORK command.
The user is then re-prompted for a vendor number or a zero.
* If the SELECT command execution results in an error condition,
subroutine SQLStatusCheck 2 is executed. This subroutine executes
SQLEXPLAIN to display all error messages. If the error is
serious, (less than -14024) a message is displayed and subroutine
TerminateProgram (4) is called to release the DBEnvironment and
terminate the entire program. If the error is not serious,
subroutine CommitWork 6 terminates the transaction by executing
the COMMIT WORK command. The user is then re-prompted for a
vendor number or a zero.
* If the SELECT command can be successfully executed, subroutine
DisplayRow 9 is executed to display the row. This subroutine
examines the null indicators for each of the three potentially
null columns (ContactName, PhoneNumber, and VendorRemarks). If
any null indicator contains a value less than zero, a message
indicating that the value is null is displayed. After the row is
completely displayed, subroutine CommitWork 6 terminates the
transaction by executing the COMMIT WORK command. The user is
then re-prompted for a vendor number or a zero.
Update Function
Function Update 12 lets the user UPDATE the value of a column only if it
contains a null value. The function prompts for a vendor number or a
zero. If a zero is entered, the function menu is re-displayed. If a
vendor number is entered, subroutine BeginTransaction 5 is executed.
Then a SELECT command is executed to retrieve data from PurchDB.Vendors
for the vendor specified. The SQLCode returned is examined to determine
the next action:
* If no rows qualify for the SELECT operation, a message is
displayed and subroutine CommitWork 6 terminates the transaction
by executing the COMMIT WORK command. The user is then
re-prompted for a vendor number or a zero.
* If more than one row qualifies for the SELECT operation, a
different message is displayed and subroutine CommitWork 6
terminates the transaction by executing the COMMIT WORK command.
The user is then re-prompted for a vendor number or a zero.
* If the SELECT command execution results in an error condition,
subroutine SQLStatusCheck 2 is executed. Then subroutine
CommitWork 6 terminates the transaction by executing the COMMIT
WORK command. The user is then re-prompted for a vendor number or
a zero.
* If the SELECT command can be successfully executed, subroutine
DisplayUpdate 11 is executed. This subroutine executes subroutine
DisplayRow 9 to display the row retrieved. Function AnyNulls 8 is
then executed to determine whether the row contains any null
values. This boolean function evaluates to TRUE if the indicator
variable for any of the three potentially null columns contains a
non-zero value.
If function AnyNulls evaluates to FALSE, a message is displayed,
no UPDATE is performed, and subroutine CommitWork 6 terminates the
transaction by executing the COMMIT WORK command. The user is
then re-prompted for a vendor number or a zero.
If function AnyNulls evaluates to TRUE, the null indicators are
examined to determine which of them contain negative values. If
the null indicator is less than zero, the column contains a null
value, and the user is prompted for a new value. If the user
enters a zero, the program assigns a -1 to the null indicator so
that when the UPDATE command is executed, a null value is assigned
to that column. If a non-zero value is entered, the program
assigns a 0 to the null indicator so that the value specified is
assigned to that column. After the UPDATE command is executed,
subroutine CommitWork 6 terminates the transaction by executing
the COMMIT WORK command. The user is then re-prompted for a
vendor number or a zero.
Delete Function
Function Delete 14 lets the user DELETE one row. The function prompts
for a vendor number or a zero. If a zero is entered, the function
menu is re-displayed. If a vendor number is entered, subroutine
BeginTransaction 5 is executed. Then a SELECT command is executed to
retrieve all data for the vendor specified from PurchDB.Vendors. The
SQLCode returned is examined to determine the next action:
* If no rows qualify for the SELECT operation, a message is
displayed and subroutine CommitWork 6 terminates the transaction
by executing the COMMIT WORK command. The user is then
re-prompted for a vendor number or a zero.
* If more than one row qualifies for the SELECT operation, a
different message is displayed and subroutine CommitWork 6
terminates the transaction by executing the COMMIT WORK command.
The user is then re-prompted for a vendor number or a zero.
* If the SELECT command execution results in an error condition,
subroutine SQLStatusCheck 2 is executed. Then subroutine
CommitWork 6 terminates the transaction by executing the COMMIT
WORK command. The user is then re-prompted for a vendor number or
a zero.
* If the SELECT command can be successfully executed, subroutine
DisplayDelete 13 is executed. This subroutine executes subroutine
DisplayRow 9 to display the row retrieved. Then the user is asked
whether she wants to actually delete the row. If the user does
not wish to delete, subroutine CommitWork 6 terminates the
transaction by executing the COMMIT WORK command, and the user is
re-prompted for a vendor number or a zero. If the user does wish
to delete, the DELETE command is executed, then subroutine
CommitWork 6 terminates the transaction by executing the COMMIT
WORK command. The user is then re-prompted for a vendor number or
a zero.
Insert Function
Function Insert 15 lets the user INSERT one row. The subroutine prompts
for a vendor number or a zero. If a zero is entered, the function menu
is re-displayed. If a vendor number is entered, the user is prompted for
values for each column. The user can enter a zero to specify a null
value for potentially null columns; to assign a null value, the
program assigns a -1 to the appropriate null indicator. Subroutine
BeginTransaction is executed to start a transaction, then an INSERT
command is used to insert a row containing the specified values. If the
INSERT operation results in an error condition, subroutine SQLStatusCheck
2 is executed, and then subroutine RollBackWork 7 is executed to issue
the ROLLBACK WORK command. If the INSERT operation is successful,
subroutine CommitWork 6 terminates the transaction by executing the
COMMIT WORK command. The user is then re-prompted for a vendor number or
a zero.
When the user enters a zero in response to the function menu display, the
program terminates by executing subroutine TerminateProgram 4. This
subroutine executes the RELEASE command.
Figure 7-1. Flow Chart of Program forex7
Figure 7-1. Flow Chart of Program forex7 (page 2 of 2)
___________________________________________________________________
| |
| : run forex7 |
| Program for Simple Data Manipulation of |
| the Vendors Table -- forex7 |
| |
| Event List: |
| CONNECT TO PartsDBE |
| Prompt for type of transaction |
| Prompt for VendorNumber |
| BEGIN WORK |
| Display row |
| Perform specified function |
| COMMIT WORK or ROLLBACK WORK |
| Repeat the above five steps until user enters 0 |
| Repeat the above seven steps until user enters 0 |
| RELEASE PartsDBE |
| |
| CONNECT TO PartsDBE |
| |
| 1....SELECT rows from PurchDB.Vendors table |
| 2....UPDATE rows with null values in PurchDB.Vendors table|
| 3....DELETE rows from PurchDB.Vendors table |
| 4....INSERT rows into PurchDB.Vendors table |
| |
| Enter your choice or a 0 to STOP > 4 |
| |
| Enter Vendor Number to INSERT or a 0 to STOP > 9016 |
| |
| Enter Vendor Name > Wolfe Works |
| |
| Enter new ContactName (0 for NULL) > Stanley Wolfe |
| |
| Enter new PhoneNumber (0 for NULL) > 408 975 6061 |
| |
| Enter new Vendor Street > 7614 Canine Way |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
___________________________________________________________________
Figure 7-2. Runtime Dialog of Program forex7
__________________________________________________________________
| |
| Enter new Vendor City > San Jose |
| |
| Enter new Vendor State > CA |
| |
| Enter new Vendor Zip Code > 90016 |
| |
| Enter new VendorRemarks (0 for NULL) > 0 |
| |
| BEGIN WORK |
| INSERT new row into PurchDB.Vendors |
| COMMIT WORK |
| |
| Enter Vendor Number to INSERT or a 0 to STOP > 0 |
| |
| 1....SELECT rows from PurchDB.Vendors table |
| 2....UPDATE rows with null values in PurchDB.Vendors table|
| 3....DELETE rows from PurchDB.Vendors table |
| 4....INSERT rows into PurchDB.Vendors table |
| |
| Enter your choice or a 0 to STOP > 1 |
| |
| Enter Vendor Number to SELECT or a 0 to STOP > 9016 |
| |
| BEGIN WORK |
| SELECT * from PurchDB.Vendors |
| |
| VendorNumber: 9016 |
| VendorName: Wolfe Works |
| ContactName: Stanley Wolfe |
| PhoneNumber: 408 975 6061 |
| VendorStreet: 7614 Canine Way |
| VendorCity: San Jose |
| VendorState: CA |
| VendorZipCode:90016 |
| VendorRemarks is NULL |
| |
| COMMIT WORK |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
__________________________________________________________________
Figure 7-2. Runtime Dialog of Program forex7 (page 2 of 4)
_____________________________________________________________________
| |
| Enter Vendor Number to SELECT or a 0 to STOP > 0 |
| |
| 1....SELECT rows from PurchDB.Vendors table |
| 2....UPDATE rows with null values in PurchDB.Vendors table |
| 3....DELETE rows from PurchDB.Vendors table |
| 4....INSERT rows into PurchDB.Vendors table |
| |
| Enter your choice or a 0 to STOP > 2 |
| |
| Enter Vendor Number to UPDATE or a 0 to STOP > 9016 |
| |
| BEGIN WORK |
| SELECT * from PurchDB.Vendors |
| |
| VendorNumber: 9016 |
| VendorName: Wolfe Works |
| ContactName: Stanley Wolfe |
| PhoneNumber: 408 975 6061 |
| VendorStreet: 7614 Canine Way |
| VendorCity: San Jose |
| VendorState: CA |
| VendorZipCode:90016 |
| VendorRemarks is NULL |
| |
| Enter new VendorRemarks (0 for NULL) > can expedite shipments|
| |
| UPDATE the PurchDB.Vendors table |
| COMMIT WORK |
| |
| Enter Vendor Number to UPDATE or a 0 to STOP > 0 |
| |
| 1....SELECT rows from PurchDB.Vendors table |
| 2....UPDATE rows with null values in PurchDB.Vendors table |
| 3....DELETE rows from PurchDB.Vendors table |
| 4....INSERT rows into PurchDB.Vendors table |
| |
| Enter your choice or a 0 to STOP > 3 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
_____________________________________________________________________
Figure 7-2. Runtime Dialog of Program forex7 (page 3 of 4)
__________________________________________________________________
| |
| Enter Vendor Number to DELETE or a 0 to STOP > 9016 |
| |
| BEGIN WORK |
| SELECT * from PurchDB.Vendors |
| |
| VendorNumber: 9016 |
| VendorName: Wolfe Works |
| ContactName: Stanley Wolfe |
| PhoneNumber: 408 975 6061 |
| VendorStreet: 7614 Canine Way |
| VendorCity: San Jose |
| VendorState: CA |
| VendorZipCode:90016 |
| VendorRemarks:can expedite shipments |
| |
| |
| Is it OK to DELETE this row (N/Y)? > Y |
| |
| DELETE row from PurchDB.Vendors! |
| COMMIT WORK |
| |
| Enter Vendor Number to DELETE or a 0 to STOP > 0 |
| |
| 1....SELECT rows from PurchDB.Vendors table |
| 2....UPDATE rows with null values in PurchDB.Vendors table|
| 3....DELETE rows from PurchDB.Vendors table |
| 4....INSERT rows into PurchDB.Vendors table |
| |
| Enter your choice or a 0 to STOP > 0 |
| |
| RELEASE PartsDBE |
| : |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
__________________________________________________________________
Figure 7-2. Runtime Dialog of Program forex7 (page 4 of 4)
_____________________________________________________________________________
| |
| PROGRAM forex7 |
| C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| C * This program illustrates simple data manipulation. It * |
| C * uses the UPDATE command with indicator variables to * |
| C * update any row in the Vendors table that contains null * |
| C * values. It also uses indicator variables in * |
| C * conjunction with SELECT and INSERT. The DELETE * |
| C * command is also illustrated. * |
| C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| |
| IMPLICIT NONE |
| |
| LOGICAL*2 Done, ConnectDBE, Select, Update, Delete |
| LOGICAL*2 Insert |
| CHARACTER Response |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| C (* Beginning of the Main Program *) 1 |
| |
| WRITE (*,*) CHAR(27),'U' |
| WRITE (*,*) 'Program for Simple Data Manipulation of Vendors |
| 1 - table forex7' |
| WRITE (*,*) ' ' |
| WRITE (*,*) 'Event List:' |
| WRITE (*,*) ' CONNECT TO PartsDBE' |
| WRITE (*,*) ' Prompt for type of transaction' |
| WRITE (*,*) ' Prompt for VendorNumber' |
| WRITE (*,*) ' BEGIN WORK' |
| WRITE (*,*) ' Display row' |
| WRITE (*,*) ' Perform specified function' |
| WRITE (*,*) ' COMMIT WORK or ROLLBACK WORK' |
| WRITE (*,*) ' Repeat the above five steps until user enters 0' |
| WRITE (*,*) ' Repeat the above seven steps until user enters 0'|
| WRITE (*,*) ' RELEASE PartsDBE' |
| WRITE (*,*) ' ' |
| |
| |
| |
| |
| |
| |
| |
| |
_____________________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE
_______________________________________________________________________________
| |
| IF (ConnectDBE()) THEN |
| Done = .FALSE. |
| DO WHILE (.NOT.Done) |
| WRITE (*,*) ' ' |
| WRITE (*,*) '1....SELECT rows from PurchDB.Vendors table' |
| WRITE (*,*) '2....UPDATE rows with null values in PurchDB.Vend|
| 1ors table' |
| WRITE (*,*) '3....DELETE rows from PurchDB.Vendors table' |
| WRITE (*,*) '4....INSERT rows into PurchDB.Vendors table' |
| WRITE (*,*) ' ' |
| WRITE (*,100) |
| 100 FORMAT($, ' Enter your choice or a 0 to STOP > ') |
| READ (*,110) Response |
| 110 FORMAT(A1) |
| IF (Response .EQ. '0') THEN |
| Done = .TRUE. |
| ELSEIF (Response .EQ. '1') THEN |
| Done = Select() |
| ELSEIF (Response .EQ. '2') THEN |
| Done = Update() |
| ELSEIF (Response .EQ. '3') THEN |
| Done = Delete() |
| ELSEIF (Response .EQ. '4') THEN |
| Done = Insert() |
| ELSE |
| WRITE (*,*) ' Enter 0-4 only please!' |
| WRITE (*,*) ' ' |
| ENDIF |
| END DO |
| CALL TerminateProgram |
| ELSE |
| WRITE (*,*) 'Cannot Connect to your DBEnvironment!' |
| ENDIF |
| STOP |
| END |
| C (* End of Main Program *) |
| |
| C (* Beginning of the Sub-Routines *) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
_______________________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 2 of 21)
_____________________________________________________________________________
| |
| SUBROUTINE SQLStatusCheck 2 |
| |
| C**** SUBROUTINE SQLStatusCheck checks status of SQL commands |
| C**** and print HPSQL error messages. |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| LOGICAL*2 Abort, Check |
| INTEGER DeadLock |
| PARAMETER (DeadLock = -14024) |
| |
| |
| C (* Begin Host Variable Declarations *) |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| CHARACTER*120 SQLMessage |
| EXEC SQL END DECLARE SECTION |
| |
| C (* End Host Variable Declarations *) |
| |
| Abort = .FALSE. |
| IF (SQLCode .LT. DeadLock) THEN |
| Abort = .TRUE. |
| WRITE (*,*) 'A serious error has occured!' |
| ENDIF |
| |
| Check = .TRUE. |
| DO WHILE (Check) |
| |
| EXEC SQL SQLEXPLAIN :SQLMessage |
| WRITE(*, 100) SQLMessage |
| 100 FORMAT(A120) |
| IF (SQLCode .EQ. 0) THEN |
| Check = .FALSE. |
| ENDIF |
| END DO |
| |
| IF (Abort) THEN |
| CALL TerminateProgram |
| STOP 'Program Aborted' |
| END IF |
| RETURN |
| END |
| C (* End of Subroutine SQLStatusCheck *) |
| |
| |
_____________________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 3 of 21)
______________________________________________________________________
| |
| LOGICAL*2 FUNCTION ConnectDBE() 3 |
| |
| C**** FUNCTION to connect to PartsDBE |
| |
| INTEGER*2 OK |
| PARAMETER (OK = 0) |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| EXEC SQL END DECLARE SECTION |
| |
| WRITE (*,*) 'CONNECT TO PartsDBE' |
| EXEC SQL CONNECT TO 'PartsDBE' |
| ConnectDBE = .TRUE. |
| IF (SQLCode .NE. OK) THEN |
| ConnectDBE = .FALSE. |
| CALL SQLStatusCheck |
| ENDIF |
| RETURN |
| END |
| C (* End of Function ConnectDBE *) |
| |
| SUBROUTINE TerminateProgram 4 |
| |
| C**** SUBROUTINE to release from PartsDBE |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| EXEC SQL END DECLARE SECTION |
| |
| WRITE(*,*) ' ' |
| WRITE(*,*) 'RELEASE PartsDBE' |
| EXEC SQL RELEASE |
| RETURN |
| END |
| C (* End of Subroutine TerminateProgram *) |
| |
| |
| |
| |
| |
| |
| |
| |
______________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 4 of 21)
______________________________________________________________________
| |
| SUBROUTINE BeginTransaction 5 |
| |
| C**** SUBROUTINE to begin work |
| INTEGER*2 OK |
| PARAMETER (OK = 0) |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| EXEC SQL END DECLARE SECTION |
| |
| WRITE (*,*) ' ' |
| WRITE (*,*) 'BEGIN WORK' |
| EXEC SQL BEGIN WORK |
| IF (SQLCode .NE. OK) THEN |
| CALL SQLStatusCheck |
| CALL TerminateProgram |
| ENDIF |
| RETURN |
| END |
| C (* End of Subroutine BeginTransaction *) |
| |
| SUBROUTINE CommitWork 6 |
| |
| C**** SUBROUTINE to commit work |
| INTEGER*2 OK |
| PARAMETER (OK = 0) |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| EXEC SQL END DECLARE SECTION |
| |
| WRITE(*,*) 'COMMIT WORK' |
| EXEC SQL COMMIT WORK |
| IF (SQLCode .NE. OK) THEN |
| CALL SQLStatusCheck |
| CALL TerminateProgram |
| ENDIF |
| RETURN |
| END |
| C (* End of Subroutine CommitWork *) |
| |
| |
| |
| |
______________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 5 of 21)
_________________________________________________________________________________
| |
| SUBROUTINE RollBackWork 7 |
| |
| C**** SUBROUTINE to RollBack Work |
| INTEGER*2 OK |
| PARAMETER (OK = 0) |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| EXEC SQL END DECLARE SECTION |
| |
| WRITE(*,*) 'ROLLBACK WORK' |
| EXEC SQL ROLLBACK WORK |
| IF (SQLCode .NE. OK) THEN |
| CALL SQLStatusCheck |
| CALL TerminateProgram |
| ENDIF |
| RETURN |
| END |
| C (* End of Subroutine RollBackWork *) |
| |
| LOGICAL*2 FUNCTION AnyNulls(ContactNameInd, |
| 1 PhoneNumberInd, VendorRemarksInd) |
| C****FUNCTION to test rows for NULL values 8 |
| |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| C (* Begin Host Variable Declarations *) |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| SQLIND ContactNameInd, PhoneNumberInd, VendorRemarksInd |
| EXEC SQL END DECLARE SECTION |
| |
| C (* End Host Variable Declarations *) |
| |
| IF ((ContactNameInd .EQ. 0) .AND. |
| 1 (PhoneNumberInd .EQ. 0) .AND. |
| 2 (VendorRemarksInd .EQ. 0)) THEN |
| C (All columns that might be null contain non-null values) |
| WRITE (*,*) 'No null values exist for this vendor.' |
| WRITE (*,*) ' ' |
| AnyNulls = .FALSE. |
| |
| |
| |
_________________________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 6 of 21)
_____________________________________________________________________________
| |
| ELSE |
| AnyNulls = .TRUE. |
| ENDIF |
| RETURN |
| END |
| C (* End of Function AnyNulls *) |
| |
| SUBROUTINE DisplayRow (VendorNumber, VendorName, ContactName, |
| 1 PhoneNumber, VendorStreet, VendorCity, |
| 2 VendorState, VendorZipCode, VendorRemarks, |
| 3 ContactNameInd, PhoneNumberInd, VendorRemarksInd)|
| C**** SUBROUTINE to display Vendors table rows 9 |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| C (* Begin Host Variable Declarations *) |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| INTEGER*4 VendorNumber |
| CHARACTER*30 VendorName |
| CHARACTER*30 ContactName |
| SQLIND ContactNameInd |
| CHARACTER*16 PhoneNumber |
| SQLIND PhoneNumberInd |
| CHARACTER*30 VendorStreet |
| CHARACTER*20 VendorCity |
| CHARACTER*2 VendorState |
| CHARACTER*10 VendorZipCode |
| CHARACTER*50 VendorRemarks |
| SQLIND VendorRemarksInd |
| CHARACTER*120 SQLMessage |
| EXEC SQL END DECLARE SECTION |
| |
| C (* End Host Variable Declarations *) |
| |
| WRITE(*,*) ' ' |
| WRITE(*, '('' VendorNumber: '',I10)') VendorNumber |
| WRITE(*, '('' VendorName: '',A30)') VendorName |
| IF (ContactNameInd .LT. 0) THEN |
| WRITE(*,*) ' ContactName is NULL' |
| ELSE |
| WRITE(*, '('' ContactName: '',A30)') ContactName |
| ENDIF |
| |
| |
| |
_____________________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 7 of 21)
____________________________________________________________________________
| |
| IF (PhoneNumberInd .LT. 0) THEN |
| WRITE(*,*) ' PhoneNumber is NULL' |
| ELSE |
| WRITE(*, '('' PhoneNumber: '',A16)') PhoneNumber |
| ENDIF |
| WRITE(*, '('' VendorStreet: '',A30)') VendorStreet |
| WRITE(*, '('' VendorCity: '',A20)') VendorCity |
| WRITE(*, '('' VendorState: '',A2)') VendorState |
| WRITE(*, '('' VendorZipCode:'',A10)') VendorZipCode |
| IF (VendorRemarksInd .LT. 0) THEN |
| WRITE(*,*) ' VendorRemarks is NULL' |
| ELSE |
| WRITE(*, '('' VendorRemarks:'',A50)') VendorRemarks |
| ENDIF |
| WRITE(*,*) ' ' |
| RETURN |
| END |
| C (* End of Subroutine DisplayRow *) |
| |
| |
| LOGICAL*2 FUNCTION Select() 10 |
| |
| C**** FUNCTION to select rows from PurchDB.Vendors table. |
| |
| INTEGER NotFound,MultipleRows,OK |
| LOGICAL*2 AnyNulls |
| PARAMETER (NotFound = 100, |
| 1 MultipleRows = -10002, |
| 2 OK = 0) |
| |
| C (* Begin SQL Communication Area *) |
| |
| EXEC SQL INCLUDE SQLCA |
| |
| C (* Begin Host Variable Declarations *) |
| |
| EXEC SQL BEGIN DECLARE SECTION |
| INTEGER*4 VendorNumber |
| CHARACTER*30 VendorName |
| CHARACTER*30 ContactName |
| SQLIND ContactNameInd |
| CHARACTER*16 PhoneNumber |
| SQLIND PhoneNumberInd |
| CHARACTER*30 VendorStreet |
| CHARACTER*20 VendorCity |
| |
| |
| |
| |
____________________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 8 of 21)
_____________________________________________________________________________
| |
| CHARACTER*2 VendorState |
| CHARACTER*10 VendorZipCode |
| CHARACTER*50 VendorRemarks |
| SQLIND VendorRemarksInd |
| CHARACTER*120 SQLMessage |
| EXEC SQL END DECLARE SECTION |
| |
| C (* End Host Variable Declarations *) |
| |
| Select = .FALSE. |
| VendorNumber = 1 |
| DO WHILE (VendorNumber .NE. 0) |
| WRITE (*,*) ' ' |
| WRITE (*,100) |
| 100 FORMAT($, ' Enter Vendor Number to SELECT or a 0 to STOP > ')|
| READ (*,110) VendorNumber |
| 110 FORMAT(I4) |
| IF (VendorNumber .NE. 0) THEN |
| CALL BeginTransaction |
| WRITE (*,*) ' ' |
| WRITE (*,*) 'SELECT * from PurchDB.Vendors' |
| EXEC SQL SELECT VendorNumber, |
| 1 VendorName, |
| 2 ContactName, |
| 3 PhoneNumber, |
| 4 VendorStreet, |
| 5 VendorCity, |
| 6 VendorState, |
| 7 VendorZipCode, |
| 8 VendorRemarks |
| 9 INTO :VendorNumber, |
| 1 :VendorName, |
| 2 :ContactName :ContactNameInd, |
| 3 :PhoneNumber :PhoneNumberInd, |
| 4 :VendorStreet, |
| 5 :VendorCity, |
| 6 :VendorState, |
| 7 :VendorZipCode, |
| 8 :VendorRemarks :VendorRemarksInd |
| 9 FROM PurchDB.Vendors |
| 1 WHERE VendorNumber = :VendorNumber |
| |
| |
| |
| |
| |
| |
| |
_____________________________________________________________________________
Figure 7-3. Program forex7: Using INSERT, UPDATE, SELECT, and DELETE (page 9 of 21)
MPE/iX 5.0 Documentation