Nonstop Database, HiRDB Version 9 UAP Development Guide

[Contents][Index][Back][Next]

Appendix F.1 SQL data types and C data descriptions

This section provides the correspondence between SQL data types and C data descriptions. Data can be exchanged between variables of compatible data types and between variables of either convertible or assignable data types.

Organization of this subsection
(1) SQL data types and C data descriptions
(2) SQL data types and C data descriptions when arrays are used
(3) SQL data types and C data descriptions when repetition columns are used
(4) Macros for referencing or setting embedded variables
(5) Pointer variables and the C language data description
(6) Macros for pointer-type repetition columns
(7) Structures to be specified in batches

(1) SQL data types and C data descriptions

The following table shows the SQL data types and C data descriptions.

Table F-1 SQL data types and C data descriptions

SQL data type C data description Remarks
SMALLINT short variable-name; --
INTEGER long variable-name; --
DECIMAL [(p[,s])] SQL TYPE IS
DECIMAL(p,s)
variable-name;#5
1 [Figure] p [Figure] 38, 0 [Figure] s [Figure] p
SMALLFLT, REAL float variable-name; --
FLOAT (DOUBLE PRECISION) double variable-name; --
CHAR [(n)]
[CHARACTER SET character-set-specification]
char
[CHARACTER SET[IS]
character-set-specification]
variable-name[n+1];#1
1 [Figure] n [Figure] 30,000
character-set-specification: [MASTER.]EBCDIK
CHAR[(2n)]
CHARACTER SET character-set-specification
char
CHARACTER SET[IS]
character-set-specification
variable-name[2n+2];
1 [Figure] n [Figure] 15,000
character-set-specification: [MASTER.]UTF16
SQL TYPE IS CHAR(2n)
CHARACTER SET[IS]
character-set-specification character-set-specification
variable-name;#10
VARCHAR(n)
[CHARACTER SET character-set-specification]
struct {
short variable-name-1;
char variable-name-2[n];
}[CHARACTER SET[IS]
character-set-specification]
structure-name;
1 [Figure] n [Figure] 32,000
variable-name-1: Character string length (bytes)
variable-name-2: Character string
character-set-specification: [MASTER.]EBCDIK
SQL TYPE IS
VARCHAR(n)
[CHARACTER SET[IS]
character-set-specification]
variable-name;#6
VARCHAR
[CHARACTER SET[IS]
character-set-specification]
variable-name[n+1]#9
VARCHAR(2n)
CHARACTER SET character-set-specification
struct {
short variable-name-1;
char variable-name-2[2n];
} CHARACTER SET[IS]
character-set-specification
structure-name;
1 [Figure] n [Figure] 16,000
variable-name-1: Character string length (number of bytes, as a multiple of 2)
variable-name-2: Character string
character-set-specification: [MASTER.]UTF16
SQL TYPE IS
VARCHAR(2n)
CHARACTER SET[IS]
character-set-specification
variable-name;#11
VARCHAR
CHARACTER SET[IS]
character-set-specification
variable-name[2n+2];#10
NCHAR [(n)] char variable-name-2[2n+1];#1 1 [Figure] n [Figure] 15,000
NVARCHAR(n) struct {
short variable-name-1;
char variable-name-2[2n];
} structure-name;
1 [Figure] n [Figure] 16,000
variable-name-1: Character string length (number of characters)
variable-name-2: Character string
SQL TYPE IS
NVARCHAR(n)
variable-name;#6
MCHAR [(n)] char variable-name[n+1];#1 1 [Figure] n [Figure] 30,000
MVARCHAR(n) struct {
short variable-name-1;
char variable-name-2[n];
} structure-name;
1 [Figure] n [Figure] 32,000
variable-name-1: Character string length (number of bytes)
variable-name-2: Character string
SQL TYPE IS
MVARCHAR(n)
variable-name;#6
DATE char variable-name[11];#2 --
TIME char variable-name[9];#2 --
INTERVAL YEAR TO DAY SQL TYPE IS
DECIMAL(8,0)
variable-name;#5
--
INTERVAL HOUR TO SECOND SQL TYPE IS
DECIMAL(6,0)
variable-name;#5
--
TIMESTAMP[(p)] char variable-name[n + 1];#2 If p = 0, n = 19.
If p = 2, n = 21 or 22.
If p = 4, n = 23 or 24.
If p = 6, n = 25 or 26.
ROW#3 char variable-name[n + 1]; 1 [Figure] total length [Figure] 30,000
BLOB SQL TYPE IS BLOB(n[K |M |G])]
variable-name;#4
Default: 1 [Figure] n [Figure] 2,147,483,647
In units of K: 1 [Figure] n [Figure] 2,097,152
In units of M: 1 [Figure] n [Figure] 2,048
In units of G: 1 [Figure] n [Figure] 2
BINARY(n) struct {
long variable-name-1;
char variable-name-2[n];
} structure-name;
1 [Figure] n [Figure] 2,147,483,647
variable-name-1: Character string length (number of bytes)
variable-name-2: Character string
SQL TYPE IS BINARY(n)
variable-name;#7
BLOB locator SQL TYPE IS
BLOB AS LOCATOR
variable-name#8
--
BINARY locator SQL TYPE IS
BINARY AS LOCATOR
variable-name#8
--
Indicator variable Other than BLOB, BINARY, BLOB locator, or BINARY locator short variable-name; --
BLOB, BINARY, BLOB locator, or BINARY locator long variable-name;
SQL statement struct {
long variable-name-1;
char variable-name-2[n];
} structure-name;
1 [Figure] n [Figure] 2,000,000
variable-name-1: Character string length (number of bytes)
variable-name-2: Character string

Legend:
--: Not applicable
n: Length (bytes)
p: Precision (total number of digits)
s: Scale (number of digits beyond the decimal point)

Note
In 64-bit mode, use int instead of long.

#1: The following rules govern data conversion between SQL data types (CHAR(n), NCHAR(n), and MCHAR(n)) and C-language data types (char[n+1], char[2n+1], and char[2n+1]):
  • For input (conversion from char[n+1] to CHAR(n), conversion from char[2n+1] to NCHAR(n), or conversion from char[n+1] to MCHAR(n))
    The length of a fixed-length character string received by HiRDB from a C language-character string is equal to the length from the beginning of the character string to one character before the null character. If no null character is found in n+1 array elements, the length is defined as n.
  • For output (conversion from CHAR(n) to char[n+1], conversion from NCHAR(n) to char[2n+1], or conversion from MCHAR(n) to char[n+1])
    A null character is appended at the end of the character string; therefore, the length of the character string known to the UAP is the SQL character string length + 1.

#2: When retrieving date data (DATE) using a dynamic SQL, the data code for the retrieval item information obtained by the DESCRIBE statement must be set as the character data type with a data length of at least 10 bytes. Similarly, when retrieving time data using a dynamic SQL, the data code for the retrieval item information obtained by the DESCRIBE statement must be set as the character data type with a data length of at least 8 bytes.
To retrieve time stamp data (TIMESTAMP) using a dynamic SQL statement, specify the following:
  • Set the data code for the retrieval item information obtained using a DESCRIBE statement to the character data type.
  • If p is 0, set the data size to 19 bytes or greater. If p is 2, 4, or 6, set the data size to 20 + p bytes or greater.

#3: The ROW type is allowed only when the HiRDB server and the HiRDB client use the same endian type.

#4: The coding of a BLOB UAP is expanded internally as follows:
struct{
      long          variable-name_reserved;             1
      unsigned long	 variable-name_length;             2
      char          variable-name_data[m];             3
} variable-name
  1. variable-name_reserved is not used. In the 64-bit mode, int variable-name_reserved; is used.
  2. variable-name_length indicates the actual BLOB size. In the 64-bit mode, unsigned int variable-name_length; is used.
  3. variable-name_data[m] is the BLOB data storage area (where m denotes the actual data length).

#5: The code for a DECIMAL UAP is internally expanded as follows:
unsigned char variable-name[[Figure]p/2[Figure]+1];
One byte of DECIMAL data expresses two numeric digits. A sign is expressed by four low-order bits of the trailing byte. Therefore, for DECIMAL data consisting of an even number of digits, four high-order bits of the leading byte must be padded with 0s. Do not use any number other than 0 for padding purposes.
The following table shows the standard sign representation; for details about the sign for DECIMAL type used with HiRDB, see the manual HiRDB Version 9 SQL Reference.
Sign in hexadecimal representation Description
X'C' Treated as a positive sign. Positive numbers include 0.
X'D' Treated as a negative sign.
Coding examples
123.4567 (odd number of digits)
unsigned char ex1[4]={0x12,0x34,0x56,0x7c};
-123.456 (even number of digits)
unsigned char ex2[4]={0x01,0x23,0x45,0x6d};
0 (odd number of digits)
unsigned char ex3[1]={0x0c};

#6: The following internal expansion takes place:
 
struct{
         short   len;
         char    str[n];
}variable-name
 
For NVARCHAR, str[2n] is used.

#7: The following internal expansion takes place:
 
struct{
         long  len;
         char  str[n];
}variable-name
 
In 64-bit mode, long len; is replaced with int len;.

#8: The following internal expansion takes place:
unsigned long variable-name;
In 64-bit mode, unsigned long variable-name; is replaced with unsigned int variable-name;.

#9: The following internal expansion takes place:
char variable-name[n+1];
The character string length is the length from the beginning of the string to the character before the NULL character. When a character string in C is accepted, an error occurs if there is no NULL character in the n+1-th array element.

#10
The following internal expansion takes place:
 
When the type specifier is not specified in the preprocessor's -XU16 option:
 
char variable-name[2n+2];
 
When the type specifier is not specified in the preprocessor's -XU16 option:
 
type-specifier variable-name[n+1];
 
For details about the -XU16 option, see 8.2.2 Preprocessing in UNIX or 8.2.3 Preprocessing in Windows.

#11
The following internal expansion takes place:
 
When the type specifier is not specified in the preprocessor's -XU16 option:
struct{
         short  len;
         char   str[2n];
} variable-name;
 
When the type specifier is not specified in the preprocessor's -XU16 option:
 
struct{
         short     len;
         type-specifier  str[n];
} variable-name;
 
For details about the -XU16 option, see 8.2.2 Preprocessing in UNIX or 8.2.3 Preprocessing in Windows.

(2) SQL data types and C data descriptions when arrays are used

The following table shows the SQL data types and C data descriptions when arrays are used.

Table F-2 SQL data types and C data descriptions when arrays are used

SQL data type C data description Remarks
SMALLINT short variable-name[m]; --
INTEGER long variable-name[m]; --
DECIMAL[(p[,s])] SQL TYPE IS DECIMAL(p,s)
variable-name[m];
1 [Figure] p [Figure] 38, 0 [Figure] s [Figure] p
SMALLFLT, REAL float variable-name[m]; --
FLOAT (DOUBLE PRECISION) double variable-name[m]; --
CHAR[(n)]
[CHARACTER SET character-set-specification]
char
[CHARACTER SET[IS]
character-set-specification]
variable-name[m][n+1];
1 [Figure] n [Figure] 30,000
character-set-specification: [MASTER.]EBCDIK
CHAR[(2n)]
CHARACTER SET character-set-specification
char
CHARACTER SET[IS]
character-set-specification
variable-name[m][2n+2];
1 [Figure] n [Figure] 15,000
character-set-specification: [MASTER.]UTF16
SQL TYPE IS CHAR(2n)
CHARACTER SET[IS]
character-set-specification
variable-name[m];
VARCHAR(n)
[CHARACTER SET character-set-specification]
struct {
short variable-name-1;
char variable-name-2[n];
}[CHARACTER SET[IS]
character-set-specification]
structure-name[m];
1 [Figure] n [Figure] 32,000
character-set-specification: [MASTER.]EBCDIK
SQL TYPE IS VARCHAR(n)
[CHARACTER SET[IS]
character-set-specification]
variable-name[m];
--
VARCHAR
[CHARACTER SET[IS]
character-set-specification]
variable-name[m][n+1];
VARCHAR(2n)
CHARACTER SET character-set-specification
struct {
short variable-name-1;
char variable-name-2[2n];
} CHARACTER SET[IS]
character-set-specification
structure-name[m];
1 [Figure] n [Figure] 16,000
variable-name-1: Character string length (number of bytes, as a multiple of 2)
variable-name-2: Character string
character-set-specification:
[MASTER.]UTF16
SQL TYPE IS VARCHAR(n)
CHARACTER SET[IS]
character-set-specification
variable-name[m];
VARCHAR
CHARACTER SET[IS]
character-set-specification
variable-name[m][2n+2]
NCHAR[(n)] char variable-name[m][2n+1]; 1 [Figure] n [Figure] 15,000
NVARCHAR[(n)] struct {
short variable-name-1;
char variable-name-2[2n];
} structure-name[m];
1 [Figure] n [Figure] 16,000
SQL TYPE IS NVARCHAR(n)
variable-name[m];
MCHAR(n) char variable-name[m][n+1]; 1 [Figure] n [Figure] 30,000
MVARCHAR(n) struct {
short variable-name-1;
char variable-name-2[n];
} structure-name[m];
1 [Figure] n [Figure] 32,000
SQL TYPE IS MVARCHAR(n)
variable-name[m];
DATE char variable-name[m][11]; --
TIME char variable-name[m][9]; --
TIMESTAMP[(p)] char variable-name[m][n + 1]; If p = 0, n = 19.
If p = 2, n = 21 or 22.
If p = 4, n = 23 or 24.
If p = 6, n = 25 or 26.
INTERVAL YEAR TO DAY SQL TYPE IS DECIMAL(8,0)
variable-name[m];
--
INTERVAL HOUR TO SECOND SQL TYPE IS DECIMAL(6,0)
variable-name[m];
--
ROW char variable-name[m][n+1]; 1 [Figure] n [Figure] 30,000
BLOB CN --
BINARY struct {
long variable-name-1;
char variable-name-2[n];
} structure-name[m];

  • FETCH that uses an array
    4 [Figure] n [Figure] 2,147,483,644 (n must be a multiple of 4.)
  • Other than FETCH that uses an array4 [Figure] n [Figure] 32,000 (n must be a multiple of 4.)
SQL TYPE IS BINARY(n)
variable-name[m];
BLOB locator CN --
BINARY locator SQL TYPE IS
BINARY AS LOCATOR
variable-name[m];
--
Indicator variable Other than BINARY or BINARY locator short variable-name[m]; --
BINARY or BINARY locator long variable-name[m]; --
SQL statement CN --

Legend:
CN: Cannot be coded.
--: Not applicable
m: Number of array elements (1 to 4,096)
n: Length (bytes)
p: Precision (total number of digits)
s: Scale (number of digits beyond the decimal point)

Note
In 64-bit mode, use int instead of long.

(3) SQL data types and C data descriptions when repetition columns are used

The following table shows the SQL data types and C data descriptions when repetition columns are used.

Table F-3 SQL data types and C data descriptions when repetition columns are used

SQL data type C data description Remarks
SMALLINT PD_MV_SINT(m) variable-name; --
INTEGER PD_MV_INT(m) variable-name; --
DECIMAL PD_MV_DEC(m,p,s) variable-name; 1 [Figure] p [Figure] 38,
0 [Figure] s [Figure] p
SMALLFLT, REAL PD_MV_SFLT(m) variable-name; --
FLOAT (DOUBLE PRECISION) PD_MV_FLT(m) variable-name; --
CHAR[(n)] PD_MV_CHAR(m,n) variable-name; 1 [Figure] n [Figure] 30,000
VARCHAR(n) PD_MV_VCHAR(m,n) variable-name; 1 [Figure] n [Figure] 32,000
PD_MV_CVCHAR(m,n) variable-name;
NCHAR[(n)] PD_MV_NCHAR(m,n) variable-name; 1 [Figure] n [Figure] 15,000
NVARCHAR[(n)] PD_MV_NVCHAR(m,n) variable-name; 1 [Figure] n [Figure] 16,000
MCHAR(n) PD_MV_CHAR(m, n) variable-name; 1 [Figure] n [Figure] 30,000
MVARCHAR(n) PD_MV_CHAR(m, n) variable-name; 1 [Figure] n [Figure] 32,000
DATE PD_MV_CHAR(m,10) variable-name; --
TIME PD_MV_CHAR(m,8) variable-name; --
TIMESTAMP[(p)] PD_MV_CHAR(m,n) variable-name; If p = 0, n = 19.
If p = 2, n = 21 or 22.
If p = 4, n = 23 or 24.
If p = 6, n = 25 or 26.
INTERVAL YEAR TO DAY PD_MV_DEC(m,8,0) variable-name; --
INTERVAL HOUR TO SECOND PD_MV_DEC(m,6,0) variable-name; --
ROW CN --
BLOB CN --
BINARY CN --
Indicator variable (other than BLOB, BINARY, BLOB locator, or BINARY locator) PD_MV_SINT(m) variable-name; --
SQL statement CN --

Legend:
CN: Cannot be coded.
--: Not applicable.
m: Maximum number of repetition array elements (2 to 30,000).
n: Length (bytes)
p: Precision (total number of digits)
s: Scale (number of digits beyond the decimal point)

(4) Macros for referencing or setting embedded variables

Special macros for referencing or setting embedded variables for each data type are used in the SQL data type and C data description when repetition columns are used. The following table shows the macros for referencing or setting embedded variables.

Table F-4 Macros for referencing or setting embedded variables

SQL data type Macro name Data to be referenced or set Data type
SMALLINT PD_MV_SINT_CNT (variable-name) Current repetition data element count long#
PD_MV_SINT_DATA (variable-name, m) Each repetition element short
INTEGER PD_MV_INT_CNT (variable-name) Current repetition data element count long#
PD_MV_INT_DATA (variable-name, m) Each repetition element long#
DECIMAL[(p[,s])] PD_MV_DEC_CNT
(variable-name)
Current repetition data element count long#
PD_MV_DEC_DATA
(variable-name,m)
Start address of each repetition element in decimal unsigned
SMALLFLT, REAL PD_MV_SFLT_CNT (variable-name) Current repetition data element count long#
PD_MV_SFLT_DATA (variable-name, m) Each repetition element float
FLOAT (DOUBLE PRECISION) PD_MV_FLT_CNT (variable-name) Current repetition data element count long#
PD_MV_FLT_DATA (variable-name, m) Each repetition element double
CHAR[(n)] PD_MV_CHAR_CNT (variable-name) Current repetition data element count long#
PD_MV_CHAR_DATA (variable-name, m) Leading address of character string of each repetition element char[ ]
VARCHAR(n) PD_MV_VCHAR_CNT (variable-name) Current repetition data element count long#
PD_MV_VCHAR_LEN (variable-name, m) Actual length of character string of each repetition element short
PD_MV_VCHAR_STR (variable-name) Address of character string of each repetition element char[ ]
PD_MV_CVCHAR_CNT(variable-name) Current repetition data element count long#
PD_MV_CVCHAR_DATA(variable-name,m) Address of character string of each repetition element char[ ]
NCHAR[(n)] PD_MV_NCHAR_CNT (variable-name) Current repetition data element count long#
PD_MV_NCHAR_DATA (variable-name, m) Leading address of character string of each repetition element char[ ]
NVARCHAR[(n)] PD_MV_NVCHAR_CNT (variable-name) Current repetition data element count long#
PD_MV_NVCHAR_LEN (variable-name, m) Actual length of character string of each repetition element short
PD_MV_NVCHAR_STR (variable-name, m) Leading address of character string of each repetition element char[ ]
MCHAR(n) PD_MV_CHAR_CNT (variable-name) Current repetition data element count long#
PD_MV_CHAR_DATA (variable-name, m) Leading address of character string of each repetition element char[ ]
MVARCHAR(n) PD_MV_VCHAR_CNT (variable-name) Current repetition data element count long#
PD_MV_VCHAR_LEN (variable-name, m) Actual length of character string of each repetition element short
PD_MV_VCHAR_STR (variable-name, m) Address of character string of each repetition element char[ ]
DATE Same as CHAR(10) -- --
TIME Same as CHAR(8) -- --
TIMESTAMP[(p)] Same as CHAR(n)
If p = 0, n = 19.
If p = 2, n = 21 or 22.
If p = 4, n = 23 or 24.
If p = 6, n = 25 or 26.
-- --
INTERVAL YEAR TO DAY Same as DECIMAL(8,0) -- --
INTERVAL HOUR TO SECOND Same as DECIMAL(6,0) -- --
Indicator variable PD_MV_SINT_CNT (variable-name) Indicator of the overall repetition column long#
PD_MV_SINT_DATA (variable-name, m) Indicator of each repetition column element short

Legend:
--: Not applicable
m: Number of each repetition column element (0 - m-1).
n: Length (bytes)
p: Precision (total number of digits)
s: Scale (number of digits beyond the decimal point)

#: In 64-bit mode, the data type is int.

The following shows an example of macros used for referencing or setting embedded variables in repetition columns:

EXEC SQL BEGIN DECLARE SECTION;
char xname[5];
PD_MV_SINT(4) xmscore;
PD_MV_CHAR(4,5) xmsubject;
EXEC SQL END DECLARE SECTION;
     :
strcpy(xname,"SMITH")
PD_MV_SINT_DATA(xmscore,0)=90;
PD_MV_SINT_DATA(xmscore,1)=65;
PD_MV_SINT_DATA(xmscore,2)=85;
PD_MV_SINT_DATA(xmscore,3)=55;
PD_MV_SINT_CNT(xmscore)=4;
strcpy(PD_MV_CHAR_DATA(xmsubject,0),"MATHEMATICS");
strcpy(PD_MV_CHAR_DATA(xmsubject,1),"ENGLISH");
strcpy(PD_MV_CHAR_DATA(xmsubject,2),"SCIENCE");
strcpy(PD_MV_CHAR_DATA(xmsubject,3),"SOCIAL STUDIES");
PD_MV_CHAR_CNT(xmsubject)=4;
EXEC SQL
  INSERT INTO
SCORE_TABLE(NAME,SUBJECT,SCORE))VALUES(:xname,
:xmsubject;:xmscore);

(5) Pointer variables and the C language data description

The following table shows pointer variables and the C language data description.

Table F-5 Pointer variables and C language data description

SQL data type C language data description Remarks
SMALLINT short *variable-name; --
INTEGER long *variable-name; --
DECIMAL[(p[,s])] SQL TYPE IS DECIMAL(p,s)
*variable-name;
1 [Figure] p [Figure] 38, 0 [Figure] s [Figure] p
SMALLFLT, REAL float *variable-name; --
FLOAT
(DOUBLE PRECISION)
double *variable-name; --
CHAR[(n)]
[CHARACTER SET character-set-specification]
char *
[CHARACTER SET[IS]
character-set-specification]*variable-name;
1 [Figure] n [Figure] 30,000#
character-set-specification: [MASTER.]EBCDIK
CHAR[(2n)]
CHARACTER SET character-set-specification
SQL TYPE IS CHAR(2n)
CHARACTER SET[IS]
character-set-specification *variable-name;
1 [Figure] n [Figure] 15,000
character-set-specification:
[MASTER.]UTF16
VARCHAR(n)
[CHARACTER SET character-set-specification]
struct {
short variable-name-1;
char variable-name-2[n];
} [CHARACTER SET[IS]
character-set-specification]*structure-name;
1 [Figure] n [Figure] 32,000
variable-name-1: Character string length (number of bytes)
variable-name-2: Character string
character-set-specification: [MASTER.]EBCDIK
SQL TYPE IS VARCHAR(n)
[CHARACTER SET[IS]
character-set-specification] *variable-name;
VARCHAR
[CHARACTER SET[IS]
character-set-specification] *variable-name;#
VARCHAR(2n)
CHARACTER SET character-set-specification
struct {
short variable-name-1;
char variable-name-2[2n];
} CHARACTER SET[IS]
character-set-specification *structure-name;
1 [Figure] n [Figure] 16,000
variable-name-1: Character string length (number of bytes, as a multiple of 2)
variable-name-2: Character string
character-set-specification:
[MASTER.]UTF16
SQL TYPE IS VARCHAR(2n)
CHARACTER SET[IS]
character-set-specification *variable-name;
NCHAR[(n)] char *variable-name; 1 [Figure] n [Figure] 15,000#
NVARCHAR(n) struct {
short variable-name-1;
char variable-name-2[2n];
} *structure-name;
1 [Figure] n [Figure] 16,000
variable-name-1: Character string length (number of characters)
variable-name-2: Character string
SQL TYPE IS
NVARCHAR(n)
*variable-name;
MCHAR[(n)] char *variable-name; 1 [Figure] n [Figure] 30,000#
MVARCHAR(n) struct {
short variable-name-1;
char variable-name-2[n];
} *structure-name;
1 [Figure] n [Figure] 32,000
variable-name-1: Character string length (number of bytes)
variable-name-2: Character string
SQL TYPE IS
MVARCHAR(n)
*variable-name;
DATE# char *variable-name; --
TIME# char *variable-name; --
TIMESTAMP# char *variable-name; --
INTERVAL YEAR TO DAY SQL TYPE IS DECIMAL(8,0)
*variable-name;
--
INTERVAL HOUR TO SECOND SQL TYPE IS DECIMAL(6,0)
*variable-name;
--
ROW char *variable-name; 1 [Figure] total-length [Figure] 30,000#
BLOB SQL TYPE IS
BLOB(n[{K|M|G}])
*variable-name;
Default: 1 [Figure] n [Figure] 2,147,483,647
In units of K: 1 [Figure] n [Figure] 2,097,152
In units of M: 1 [Figure] n [Figure] 2,048
In units of G: 1 [Figure] n [Figure] 2
BINARY(n) struct {
long variable-name-1;
char variable-name-2[n];
} *structure-name;
1 [Figure] n [Figure] 2,147,483,647
SQL TYPE IS BINARY(n)
*variable-name;
BLOB locator SQL TYPE IS
BLOB AS LOCATOR
*variable-name;
--
BINARY locator SQL TYPE IS
BINARY AS LOCATOR
*variable-name;
--
Indicator variable Other than BLOB, BINARY, BLOB locator, or BINARY locator short *variable-name; --
BLOB, BINARY, BLOB locator, or BINARY locator long *variable-name;
SQL statement struct {
long variable-name-1;
char variable-name-2[n];
} *structure-name;
1 [Figure] n [Figure] 2,000,000
SMALLINT ARRAY m PD_MV_SINT(m)
*variable-name;
--
INTEGER ARRAY m PD_MV_INT(m)
*variable-name;
--
DECIMAL[(p[,s])] ARRAY m PD_MV_DEC(m,p,s)
*variable-name;
1 [Figure] p [Figure] 38, 0 [Figure] s [Figure] p
SMALLFLT ARRAY m
(REAL)
PD_MV_SFLT(m)
*variable-name;
--
FLOAT ARRAY m
(DOUBLE PRECISION)
PD_MV_FLT(m)
*variable-name;
--
CHAR[(n)] ARRAY m and
MCHAR[(n)] ARRAY m
PD_MV_CHAR(m,n)
*variable-name;
1 [Figure] n [Figure] 30,000
VARCHAR[(n)] ARRAY m and MVARCHAR[(n)] ARRAY m PD_MV_VCHAR(m,n)
*variable-name;
1 [Figure] n [Figure] 32,000
PD_MV_CVCHAR(m,n)
*variable-name;
NCHAR[(n)] ARRAY m PD_MV_NCHAR(m,n)
*variable-name;
1 [Figure] n [Figure] 15,000
NVARCHAR[(n)] ARRAY m PD_MV_NVCHAR(m,n)
*variable-name;
1 [Figure] n [Figure] 16,000
DATE ARRAY m PD_MV_CHAR(m,10)
*variable-name;
--
TIME ARRAY m PD_MV_CHAR(m,8)
*variable-name;
--
TIMESTAMP ARRAY m PD_MV_CHAR(m,n)
*variable-name;
If p = 0, n = 19.
If p = 2, n = 21 or 22.
If p = 4, n = 23 or 24.
If p = 6, n = 25 or 26.
INTERVAL YEAR TO DAY ARRAY m PD_MV_DEC(m,8,0)
*variable-name;
--
INTERVAL HOUR TO SECOND ARRAY m PD_MV_DEC(m,6,0)
*variable-name;
--
Indicator variable for repetition column PD_MV_SINT(m)
*variable-name;
--

Legend:
--: Not applicable
m: Number (0 - m-1) indicating each element in a repetition column
n: Length (bytes)
p: Precision (total number of digits)
s: Scale (number of digits beyond the decimal point)

Note
In 64-bit mode, use int instead of long.

#: The defined length of the area cannot be determined during preprocessing. Therefore, at the time of execution, use strlen(variable-name) to determine the length of the character string stored in the area indicated by the pointer, and use this length in place of the area length. To receive the retrieval result, use a character other than NULL character to clear the area indicated by the pointer and enter the NULL character at the end.

(6) Macros for pointer-type repetition columns

To reference or set a variable for a pointer-type repetition column, use a dedicated macro. The following table shows the macros for pointer-type repetition columns.

Table F-6 Macros for pointer-type repetition columns

SQL data type Macro name Data to be referenced or set Data type
SMALLINT ARRAY m PD_MV_SINTP_CNT(variable-name) Current repetition data element count long#
PD_MV_SINTP_DATA(variable-name,m) Each repetition element short
INTEGER ARRAY m PD_MV_INTP_CNT(variable-name) Current repetition data element count long#
PD_MV_INTP_DATA(variable-name,m) Each repetition element long#
DECIMAL[(p[,s])] ARRAY m PD_MV_DECP_CNT(variable-name) Current repetition data element count long#
PD_MV_DECP_DATA(variable-name,m) Start address of each repetition element in decimal char[ ]
SMALLFLT ARRAY m
(REAL)
PD_MV_SFLTP_CNT(variable-name) Current repetition data element count long#
PD_MV_SFLTP_DATA(variable-name,m) Each repetition element float
FLOAT ARRAY m
(DOUBLE PRECISION)
PD_MV_FLTP_CNT(variable-name) Current repetition data element count long#
PD_MV_FLTP_DATA(variable-name,m) Each repetition element double
CHAR[(n)] ARRAY m, or MCHAR[(n)] ARRAY m PD_MV_CHARP_CNT(variable-name) Current repetition data element count long#
PD_MV_CHARP_DATA(variable-name,m) Leading address of character string of each repetition element char[ ]
VARCHAR(n) ARRAY m, or MVARCHAR(n) ARRAY m PD_MV_VCHARP_CNT(variable-name) Current repetition data element count long#
PD_MV_VCHARP_LEN(variable-name,m) Actual length of character string of each repetition element short
PD_MV_VCHARP_STR(variable-name,m) Address of character string of each repetition element char[ ]
PD_MV_CVCHARP_CNT(variable-name) Current repetition data element count long#
PD_MV_CVCHARP_DATA(variable-name, m) Address of character string of each repetition element char[ ]
NCHAR[(n)] ARRAY m PD_MV_NCHARP_CNT(variable-name) Current repetition data element count long#
PD_MV_NCHARP_DATA(variable-name,m) Leading address of character string of each repetition element char[ ]
NVARCHAR(n) ARRAY m PD_MV_NVCHARP_CNT(variable-name) Current repetition data element count long#
PD_MV_NVCHARP_LEN(variable-name,m) Actual length of character string of each repetition element short
PD_MV_NVCHARP_STR(variable-name,m) Leading address of character string of each repetition element char[ ]
DATE ARRAY m Same as CHAR(10) -- --
TIME ARRAY m Same as CHAR(8) -- --
TIMESTAMP[(p)] ARRAY m Same as CHAR(n)
If p = 0, n = 19.
If p = 2, n = 21 or 22.
If p = 4, n = 23 or 24.
If p = 6, n = 25 or 26.
-- --
INTERVAL YEAR TO DAY Same as DECIMAL(8,0) -- --
INTERVAL HOUR TO SECOND Same as DECIMAL(6,0) -- --
Indicator variable PD_MV_SINTP_CNT(variable-name) Indicator of the overall repetition column long#
PD_MV_SINTP_DATA(variable-name,m) Indicator of each repetition column element short

Legend:
--: Not applicable
m: Number of each repetition column element (0 - m-1)
n: Length (bytes)
p: Precision (total number of digits)
s: Scale (number of digits beyond the decimal point)

#: In 64-bit mode, the data type is int.

(7) Structures to be specified in batches

The following table shows the structures to be specified in batches.

Table F-7 Structures to be specified in batches

SQL data type C language data description Item coding Remarks
Multiple items Structure that contains the data types listed in Tables F-1 to F-3 as members Specifies multiple embedded variables in a batch. Pointers can be declared.
Indicator variable for multiple items Structure that contains as members the indicator variables listed in Tables F-1 to F-3 Specifies multiple indicator variables in a batch. Pointers can be declared.