Using Host Variables [ ALLBASE/SQL FORTRAN Application Programming Guide ] MPE/iX 5.0 Documentation
ALLBASE/SQL FORTRAN Application Programming Guide
Using Host Variables
You use host variables in SQL commands as follows:
* To pass data values, when using the following data manipulation
commands:
SELECT
INSERT
DELETE
UPDATE
FETCH
DELETE WHERE CURRENT
UPDATE WHERE CURRENT
* To hold null value indicators in four data manipulation commands:
SELECT
INSERT
FETCH
UPDATE
* To pass dynamic commands at runtime, achieved by using the
following commands:
PREPARE
EXECUTE IMMEDIATE
* To hold savepoint numbers, which are used in the following
commands:
SAVEPOINT
ROLLBACK WORK TO
* To hold messages from the ALLBASE/SQL message catalog, obtained by
using the SQLEXPLAIN command.
This chapter provides examples illustrating where, in the commands
itemized above, the SQL syntax supports host variables. This chapter
also takes a brief look at two special cases:
* Using host variables in subprogram units.
* Using host variables in conjunction with data in batch files.
Some of the examples are numbered so later in this chapter, under
"Declaring Host Variables", you can quickly find declaration examples for
the same host variables.
Host Variable Names
Host variable names in FORTRAN programs must:
* Contain from 1 to 30 ASCII characters.
* Conform to the rules for ALLBASE/SQL basic names.
* Contain only characters chosen from the following set: the 26
letters of the ASCII alphabet, the 10 decimal digits, or an
underscore (_).
* Begin with an alpha character but not the prefix EXEC SQL.
* Not begin or end with a hyphen.
* Not be the same as any ALLBASE/SQL or FORTRAN reserved word.
In all SQL commands containing host variables, the host variable name
must be preceded by a colon:
:HostVariableName
Input and Output Host Variables
Host variables can be used for input or for output:
* Input host variables provide data for ALLBASE/SQL.
* Output host variables contain data from ALLBASE/SQL.
When using an input host variable, you must initialize it before using
it.
Data Values and Null Indicators
Host variables containing data values can be input or output host
variables. In the following SELECT command, the INTO clause contains two
output host variables: PartNumber and PartName; ALLBASE/SQL puts data
from the PurchDB.Parts table into these host variables. The WHERE clause
contains one input host variable: PartNumber; ALLBASE/SQL reads data
from this host variable to determine which row to retrieve.
EXEC SQL SELECT PartNumber, PartName
1 INTO :PartNumber,
2 :PartName
3 FROM PurchDB.Parts
4 WHERE PartNumber = :PartNumber
In this example, one host variable, PartNumber, is used for both input
and output.
Indicator Variables.
Host variables that contain null value indicators are called indicator
variables. Indicator variables are used in SELECT, FETCH, and INSERT
commands to identify null values, and in SELECT and FETCH commands to
identify truncated output strings.
In SELECT and FETCH commands, an indicator variable is an output host
variable containing one of the following indicators, which describe the
data ALLBASE/SQL returns:
0 value is not null
-1 value is null
>0 string value is truncated; number indicates string
length before truncation.
In the INSERT command, an indicator variable is an input host variable.
You put one of the following indicators into the indicator variable to
tell ALLBASE/SQL when to insert a null value in a column:
>=0 is not null
<0 value is null
An indicator variable must appear in an SQL command immediately after the
host variable whose data it describes. The following SELECT command uses
an indicator variable, PartNameInd, for data from the PartName column.
When this column contains a null value, ALLBASE/SQL puts a negative
number into PartNameInd:
EXEC SQL SELECT PartNumber, PartName
1 INTO :PartNumber,
2 :PartName :PartNameInd
3 FROM PurchDB.Parts
4 WHERE PartNumber = :PartNumber
Any column not defined with the NOT NULL attribute may contain null
values. In the PurchDB.Parts table, ALLBASE/SQL prevents the PartNumber
column from containing null values, because it was defined as NOT NULL.
In the other two columns, however, null values may occur:
CREATE PUBLIC TABLE PurchDB.Parts
1 (PartNumber CHAR(16) NOT NULL,
2 PartName CHAR(30),
3 SalesPrice DECIMAL(10,2))
4 IN WarehFS
Null values have certain properties that you need to remember when
manipulating data that may be null. For example, ALLBASE/SQL ignores
columns or rows containing null values when evaluating an aggregate
function (except that COUNT(*) includes all null values). Refer to the
ALLBASE/SQL Reference Manual for a complete account of the properties of
null values.
Be sure to use an indicator variable in the SELECT and FETCH commands
whenever columns accessed may contain null values. A runtime error
results if ALLBASE/SQL retrieves a null value and the program contains no
indicator variable.
You can use an indicator variable to detect truncated strings in the
SELECT and FETCH commands. In the SELECT command illustrated above,
PartNameInd contains a value greater than zero (>0) when a part name is
too long for the host variable declared to hold it. The value in
PartNameInd indicates the actual length of the string before truncation.
MPE/iX 5.0 Documentation