HELPLIB.HLB  —  SQLPRE72  Host Language Variable Declarations, C Variables
                                   NOTE

       C is a case-sensitive language. The names of objects
       declared in a C program are case sensitive, but the names
       of SQL tables and other names are not case sensitive.
       Therefore, you must be careful about C constructs that
       you specify in SQL statements. These constructs include
       variable names and labels of program sections. See the
       Oracle Rdb Guide to SQL Programming for more information
       about declaring C variables.

    The following list describes the variable declaration syntax for
    character data types that the SQL precompiler supports in C:

    o  char x[n]

    o  char *x, assumes LONG VARCHAR type (that is, char x[16383])

    o  char CHARACTER SET character-set-name clause

       The CHARACTER SET character-set-name clause is optional.

    o  $SQL_VARCHAR (n)

    o  $SQL_VARCHAR (n) CHARACTER SET character-set-name

       The CHARACTER SET clause is optional.

    For information about the supported character sets, see the
    Oracle Rdb SQL Reference Manual.

    The following list describes the variable declaration syntax that
    the SQL precompiler supports in C:

    o  Data type keywords

    o  Storage class identifiers and modifiers

    o  struct

    o  union

    o  typedef

    o  Initial value assignments

    o  Arrays

       Only single-dimension arrays are supported and only to declare
       an indicator array for use with a reference to a structure
       in SQL statements. Furthermore, the size of the array must be
       specified explicitly. Although you can use any data type for
       indicator array elements, Oracle Rdb recommends that you use
       variables of the data type integer, such as int or short.

    o  Pointers

       Only a single level of pointer variables are supported and
       only those that point to elementary data types.

       Because C pointer variables cannot specify length attributes,
       SQL sometimes must allocate the largest possible piece of
       memory to process statements that refer to char pointer
       variables. SQL cannot determine the length of char pointer
       variables and allocates 16,383 bytes of memory for each
       variable in the following cases:

       -  The SQL statement contains a concatenated value expression
          or a substring.

       -  The SQL statement refers to the char pointer variable in a
          predicate, such as WHERE EMP_ID = :POINTER_VAR.

       -  The SQL statement converts the contents of the char pointer
          variable to a numeric data type in the database.

       Avoid the use of char pointer variables in these cases because
       such a large memory allocation for char pointer variables
       wastes memory and degrades performance, especially for remote
       database access.

    o  Valid declaration syntax

       The following are examples of valid declaration syntax:

       a_var[10];

       $SQL_VARCHAR(10) x,y,z;

       int            SQLCODE;

       struct
            {
            char       b_var[5];
            short int  c_var;
            } a_record;

       union
            {
            char         string_date[17];
            struct
                 {
                 char     year_var1[2];
                 char     year_var2[2];
                 char     month_var[2];
                 char     day_var[2];
                 char     hour_var[2];
                 char     minute_var[2];
                 char     second_var[2];
                 char     hundredth_var[2];
                 } date_group;
             } date_union;

       int               indicator_item[2];

       globaldef double  c_var;

       static            d_var;

       char              *x;

    o  Invalid declaration syntax

    Table 7 Supported C Datatypes

    C
    type
    or
    typedefSQL type           Comments and Restrictions

    char   CHARACTER
    char   LONG VARCHAR       Assumed to be VARCHAR (16383)
    *
    char   CHARACTER          n must be be an integer literal;
    [n]                       #define names or expressions are not
                              supported.
    int    INTEGER            Cannot be specified as unsigned.
    short  SMALLINT           Cannot be specified as unsigned.
    short  INTEGER            Cannot be specified as unsigned.
    int
    long   INTEGER            Cannot be specified as unsigned.
    int
    float  REAL
    double DOUBLE PRECISION
    enum   INTEGER
    long   INTEGER            On OpenVMS the data type long is 32
                              bits
    int8   TINYINT            Requires #include <ints.h>
    int16  SMALLINT           Requires #include <ints.h>
    __int16SMALLINT
    int32  INTEGER            Requires #include <ints.h>
    __int32INTEGER
    int64  BIGINT             Requires #include <ints.h>
    __int64BIGINT
           $SQL_VARCHAR (n)   The CHARACTER SET clause is optional.
           SQL_DATE           The SQL precompiler will transform the
           SQL_DATE_ANSI      pseudo types in natvie C datatypes
           SQL_DATE_VMS
           SQL_TIME
           SQL_TIMESTAMP

           SQL_INTERVAL (DAY  Use this data type for variables that
           TO SECOND)         represent the difference between two
                              dates or times. Precompiler Date-Time
                              Data Mapping lists all the supported
                              INTERVAL data types.
Close Help