Scalable Database Server, HiRDB Version 8 UAP Development Guide
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.
Table E-1 shows how SQL data types relate to C data descriptions. Table E-2 shows how SQL data types relate to C data descriptions when arrays are used. Table E-3 shows SQL data types and C data descriptions when repetition columns are used.
Table E-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 |
|
| SMALLFLT, REAL | float variable-name; | ||
| FLOAT (DOUBLE PRECISION) | double variable-name; | ||
| CHAR [(n)] | char variable-name[n+1];1 | 1 |
|
| VARCHAR(n) | struct { short variable-name-1; char variable-name-2[n]; } structure-name; |
1 |
|
| SQL TYPE IS VARCHAR(n) variable-name;6 |
|||
| VARCHAR variable-name[n+1]9 | |||
| NCHAR [(n)] | char variable-name-2[2n+1];1 | 1 |
|
| NVARCHAR(n) | struct { short variable-name-1; char variable-name-2[2n]; } structure-name; |
1 |
|
| SQL TYPE IS NVARCHAR(n) variable-name;6 |
|||
| MCHAR [(n)] | char variable-name[n+1];1 | 1 |
|
| MVARCHAR(n) | struct { short variable-name-1; char variable-name-2[n]; } structure-name; |
1 |
|
| 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. |
|
| ROW3 | char variable-name[n + 1]; | 1 |
|
| BLOB | SQL TYPE IS BLOB(n[K |M |G])] variable-name;4 |
Default: 1 In units of K: 1 In units of M: 1 In units of G: 1 |
|
| BINARY(n) | struct { long variable-name-1; char variable-name-2[n]; } structure-name; |
1 |
|
| SQL TYPE IS BINARY(n) variable-name;7 |
|||
| BLOB locator | SQL TYPE IS BLOB AS LOCATOR variable-name8 |
||
| BINARY locator | SQL TYPE IS BINARY AS LOCATOR variable-name8 |
||
| 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 |
|
struct{
long variable-name_reserved; 1
unsigned long variable-name_length; 2
char variable-name_data[m]; 3
} variable-nameunsigned char variable-name[p/2
+1];
| Sign in hexadecimal representation | Description |
|---|---|
| X'C' | Treated as a positive sign. Positive numbers include 0. |
| X'D' | Treated as a negative sign. |
struct{
short len;
char str[n];
}variable-name
struct{
long len;
char str[n];
}variable-name
unsigned long variable-name;
char variable-name[n+1];
Table E-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 |
|
| SMALLFLT, REAL | float variable-name[m]; | ||
| FLOAT (DOUBLE PRECISION) | double variable-name[m]; | ||
| CHAR[(n)] | char variable-name[m][n+1]; | 1 |
|
| VARCHAR(n) | struct { short variable-name-1; char variable-name-2[n]; } structure-name[m]; |
1 |
|
| SQL TYPE IS VARCHAR(n) variable-name[m]; |
|||
| VARCHAR variable-name[m][n+1]; | |||
| NCHAR[(n)] | char variable-name[m][2n+1]; | 1 |
|
| NVARCHAR[(n)] | struct { short variable-name-1; char variable-name-2[2n]; } structure-name[m]; |
1 |
|
| SQL TYPE IS NVARCHAR(n) variable-name[m]; |
|||
| MCHAR(n) | char variable-name[m][n+1]; | 1 |
|
| MVARCHAR(n) | struct { short variable-name-1; char variable-name-2[n]; } structure-name[m]; |
1 |
|
| 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 |
|
| BLOB | CN | ||
| BINARY | struct { long variable-name-1; char variable-name-2[n]; } structure-name[m]; |
|
|
| SQL TYPE IS BINARY(n) variable-name[m]; |
|||
| BLOB locator | |||
| 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 | ||
Table E-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 0 |
| 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 |
| VARCHAR(n) | PD_MV_VCHAR(m,n) variable-name; | 1 |
| PD_MV_CVCHAR(m,n) variable-name; | ||
| NCHAR[(n)] | PD_MV_NCHAR(m,n) variable-name; | 1 |
| NVARCHAR[(n)] | PD_MV_NVCHAR(m,n) variable-name; | 1 |
| MCHAR(n) | PD_MV_CHAR(m, n) variable-name; | 1 |
| MVARCHAR(n) | PD_MV_CHAR(m, n) variable-name; | 1 |
| 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 |
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. Table E-4 shows the macros for referencing or setting embedded variables.
Table E-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 |
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);
Table E-5 shows pointer variables and the C language data description.
Table E-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 |
|
| SMALLFLT, REAL | float *variable-name; | ||
| FLOAT (DOUBLE PRECISION) |
double *variable-name; | ||
| CHAR[(n)] | char *variable-name; | 1 |
|
| VARCHAR(n) | struct { short variable-name-1; char variable-name-2[n]; } *structure-name; |
1 |
|
| SQL TYPE IS VARCHAR(n) *variable-name; |
|||
| VARCHAR *variable-name;* | |||
| NCHAR[(n)] | char *variable-name; | 1 |
|
| NVARCHAR(n) | struct { short variable-name-1; char variable-name-2[2n]; } *structure-name; |
1 |
|
| SQL TYPE IS NVARCHAR(n) *variable-name; |
|||
| MCHAR[(n)] | char *variable-name; | 1 |
|
| MVARCHAR(n) | struct { short variable-name-1; char variable-name-2[n]; } *structure-name; |
1 |
|
| 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 |
|
| BLOB | SQL TYPE IS BLOB(n[{K|M|G}]) *variable-name; |
Default: 1 In units of K: 1 In units of M: 1 In units of G: 1 |
|
| BINARY(n) | struct { long variable-name-1; char variable-name-2[n]; } *structure-name; |
1 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| VARCHAR[(n)] ARRAY m and MVARCHAR[(n)] ARRAY m | PD_MV_VCHAR(m,n) *variable-name; |
1 |
|
| PD_MV_CVCHAR(m,n) *variable-name; |
|||
| NCHAR[(n)] ARRAY m | PD_MV_NCHAR(m,n) *variable-name; |
1 |
|
| NVARCHAR[(n)] ARRAY m | PD_MV_NVCHAR(m,n) *variable-name; |
1 |
|
| 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; |
||
To reference or set a variable for a pointer-type repetition column, use a dedicated macro. Table E-6 shows the macros for pointer-type repetition columns.
Table E-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 |
Table E-7 shows the structures to be specified in batches.
Table E-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 E-1 to E-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 E-1 to E-3 | Specifies multiple indicator variables in a batch. | Pointers can be declared. |
All Rights Reserved. Copyright (C) 2007, Hitachi, Ltd.