Previous Topic: Distinguishing Storage for Use as Host-Variables in PL/INext Topic: Rules for SQL INCLUDEs in PL/I


Host-Variable Declarations for PL/I

The maximum length allowed for a host-variable is 32,765 bytes.

ANSI Standard Host-Variable Data Types in PL/I

The ANSI standard allowable data types are as follows:

SQL Data Type

PL/I Declaration

CHARACTER or CHAR

CHARACTER(n) or CHAR(n)

DECIMAL or DEC
(packed decimal)

FIXED DECIMAL (p,s) or DECIMAL FIXED (p,s) or
FIXED (p,s) DECIMAL or DECIMAL (p,s) FIXED

INTEGER or INT
(large integer)

FIXED BINARY (n) or BINARY FIXED (n) or
FIXED (n) BINARY or BINARY (n) FIXED where 16 <= n <= 31

FLOAT

BINARY FLOAT (n) or FLOAT BINARY (n) or
BIN FLOAT (n) or FLOAT BIN (n) where 22 <= n <= 53

Valid short forms of the declarations are:

Non-ANSI Host-Variable Data Types in PL/I

The non-ANSI standard allowable data types are as follows:

SQL Data Type

PL/I Declaration

CHARACTER or CHAR

CHARACTER(n) or CHAR(n)

NUMERIC
(zoned decimal)

PICTURE(pVs) or PIC(pVs)

DECIMAL or DEC
(packed decimal)

FIXED DECIMAL (p,s) or DECIMAL FIXED (p,s) or
FIXED (p,s) DECIMAL or DECIMAL (p,s) FIXED

SMALLINT
(small integer)

FIXED BINARY (n) or BINARY FIXED (n) or
FIXED (n) BINARY or BINARY (n) FIXED where 1 <= n <= 15

INTEGER or INT
(large integer)

FIXED BINARY (n) or BINARY FIXED (n) or
FIXED (n) BINARY or BINARY (n) FIXED where 16 <= n <= 31

FLOAT

BINARY FLOAT (n) or FLOAT BINARY (n) or
BIN FLOAT (n) or FLOAT BIN (n) where 22 <= n <= 53

DECIMAL FLOAT (n) or DEC FLOAT (n) where 7 <= n <= 16

DATE

CHARACTER(10) or CHAR(10)

TIME

CHARACTER(8) or CHAR(8)

TIMESTAMP

CHARACTER(26) or CHAR(26)

VARCHAR

CHARACTER(n) VARYING

LONG VARCHAR

CHARACTER(n) VARYING

GRAPHIC

GRAPHIC(x)
where x is the precision (maximum number of DBCS characters)

VARGRAPHIC

GRAPHIC(x) VARYING
where x is the precision (maximum number of DBCS characters)

LONG VARGRAPHIC

GRAPHIC(x) VARYING
where x is the precision (maximum number of DBCS characters)

Valid short forms of the declarations are:

The CA Datacom/DB Preprocessor for PL/I recognizes GRAPHIC host variables and allows mixed data in literals. The Shift-Out and Shift-In characters specified in the CXXMAINT option of the CA Datacom/DB Utility (DBUTLTY) are used by the Preprocessor.

Note: PL/I controlled variables are not supported.

PL/I Examples

In the following examples, BEGIN and END DECLARE SECTION markers are used for clarity. They may or may not be required, depending on the SQL mode being used (see Distinguishing Storage for Use as Host-Variables in PL/I).

PL/I Example 1

 EXEC SQL BEGIN DECLARE SECTION ;
                     /*---------------------------------
                       Host-variables
                     *--------------------------------*/
     DECLARE HID             CHAR(12)         INIT(' ');
     DECLARE HNAME_LAST      CHAR(30)         INIT(' ');
     DECLARE HSTATE          CHAR(36)         INIT(' ');
                     /*---------------------------------
                       Indicator variables
                     *--------------------------------*/
     DECLARE IID             FIXED BINARY(15) INIT(0);
     DECLARE INAME_LAST      FIXED BINARY(15) INIT(0);
     DECLARE ISTATE          FIXED BINARY(15) INIT(0);
 EXEC SQL END DECLARE SECTION ;

PL/I Example 2

                     /*---------------------------------
                       An alternate form for the declare
                       section.
                     *--------------------------------*/
 EXEC SQL
     BEGIN DECLARE SECTION ;
 %SKIP
                     /*---------------------------------
                       Indicator & host-variable pair
                     *--------------------------------*/
 DCL ID_IVAR        FIXED BINARY(15);
 DCL ID             CHAR(12);
 %SKIP
 DCL NAME_LAST_IVAR FIXED BINARY(15);
 DCL NAME_CODE      CHAR(30);
 %SKIP
 EXEC SQL
     END DECLARE SECTION ;

PL/I Example 3

 EXEC SQL BEGIN DECLARE SECTION ;
                     /*---------------------------------
                       Host-variables
                     *--------------------------------*/
     DECLARE HID             CHAR(12)         INIT(' ');
     DECLARE HNAME_LAST      CHAR(30)         INIT(' ');
     DECLARE HSTATE          CHAR(36)         INIT(' ');
     %SKIP
                     /*---------------------------------
                       Multiple indicator variables in
                       a single declare
                     *--------------------------------*/
     DECLARE ( IID,
               INAME_LAST,
               ISTATE )      FIXED BINARY(15) INIT(0);
 EXEC SQL END DECLARE SECTION ;

PL/I Example 4

 EXEC SQL BEGIN DECLARE SECTION ;
                                /*-----------------------------------
                                  Host-variables within a structure
                                  Possible direct references:
                                    Name         Qualified name
                                    -----        --------------------
                                    SEQ          GRPED.SEQ
                                    NAME_FIRST   NAME_ALL.NAME_FIRST
                                    NAME_MIDDLE  NAME_ALL.NAME_MIDDLE
                                    NAME_LAST    NAME_ALL.NAME_LAST
                                    NAME_ADDL    NAME_ALL.NAME_ADDL
                                    SSAN         GRPED.SSAN
                                    CITY         GRPED.CITY
                                    STATE        GRPED.STATE
                                    ZIP_5        ZIP.ZIP_5
                                    ZIP_4        ZIP.ZIP_4
                                  Possible indirect references:
                                    NAME_ALL
                                  Ineligible fields and references:
                                    Specification  Reason
                                    -------------  ---------------
                                    ZIP_ST         not 15,0 or 31,0
                                                   for use as short
                                                   integer or integer
                                                   respectively
                                    NOTES          array
                                    GRPED          too many levels
                                                   & contains
                                                   ineligible field
                                    ZIP            ineligible field
                                *----------------------------------*/
     DECLARE
         1   GRPED,
          2  SEQ                 CHAR(2),
          2  NAME_ALL ,
           3 NAME_FIRST          CHAR(30),
           3 NAME_MIDDLE         CHAR(30),
           3 NAME_LAST           CHAR(30),
           3 NAME_ADDL           CHAR(30),
          2  SSAN                CHAR(11),
          2  CITY                CHAR(30),
          2  STATE               CHAR(30),
          2  ZIP,
           3  ZIP_5              PIC'9999T',
           3  ZIP_4              PIC'999T',
           3  ZIP_ST             FIXED BIN(9,4),
          2  NOTES(3)            CHAR(80);
     DECLARE (ISEQ, INAME, ISSAN, ICITY, ISTATE, IZIP )
                 FIXED BINARY(15) INIT(0);
 EXEC SQL END DECLARE SECTION ;

PL/I Example 5

 EXEC SQL BEGIN DECLARE SECTION ;
                                /*-----------------------------------
                                  Host-variables within a structure
                                  Possible indirect references:
                                    NAME
                                    ZIP
                                  Invalid indirect references:
                                    Specification  Reason
                                    -------------  ---------------
                                    ADDRESS        too many levels
                                                   & contains array
                                    TYPE           contains array
                                    MAILING        too many levels
                                  When CHAR(n) VARYING is specified,
                                  the two fields generated do not
                                  count as an additional level for
                                  expansion purposes.
                                *----------------------------------*/
    DECLARE
        1    ADDRESS,
         2   TYPE,
          3  TYPE_R              CHAR(1),
          3  TYPE_X(3)           CHAR(1),
         2   NAME,
          3  FIRST_NAME          CHAR(30) VARYING,
          3  MIDDLE_NAME         CHAR(30) VARYING,
          3  LAST_NAME           CHAR(30) VARYING,
         2   MAILING,
          3  CARE_OF             CHAR(60) VARYING,
          3  LINE_1              CHAR(60) VARYING,
          3  LINE_2              CHAR(60) VARYING,
          3  LINE_3              CHAR(60) VARYING,
          3  CITY                CHAR(60),
          3  STATE               CHAR(30),
          3  ZIP,
           4 ZIP_5               PIC'9999T',
           4 ZIP_4               PIC'999T';
 EXEC SQL END DECLARE SECTION ;

PL/I Example 6

 EXEC SQL BEGIN DECLARE SECTION ;
                                /*-----------------------------------
                                  Host-variables within a structure
                                  This structure, though similar to
                                  the previous example, expands
                                  entirely.
                                *----------------------------------*/
    DECLARE
        1   ADDRESS,
         2  TYPE                CHAR(4),
         2  FIRST_NAME          CHAR(30) VARYING,
         2  MIDDLE_NAME         CHAR(30) VARYING,
         2  LAST_NAME           CHAR(30) VARYING,
         2  CARE_OF             CHAR(60) VARYING,
         2  LINE_1              CHAR(60) VARYING,
         2  LINE_2              CHAR(60) VARYING,
         2  LINE_3              CHAR(60) VARYING,
         2  CITY                CHAR(60),
         2  STATE               CHAR(30),
         2  ZIP                 PIC'99999999T';
 EXEC SQL END DECLARE SECTION ;