Determining equivalent SQL and COBOL data types
The precompiler determines the base SQLTYPE and SQLLEN of host variables based on this table. If a host variable appears with an indicator variable, the SQLTYPE is the base SQLTYPE plus one.
COBOL data type | SQLTYPE of host variable | SQLLEN of host variable | SQL data type |
---|---|---|---|
S9(i)V9(d) COMP-3 or S9(i)V9(d) COMP or S9(i)V9(d) PACKED-DECIMAL | 484 | i+d in byte 1, d in byte 2 | DECIMAL(i+d,d) |
S9(i)V9(d) DISPLAY SIGN LEADING SEPARATE | 504 | i+d in byte 1, d in byte 2 | No exact equivalent use DECIMAL(i+d,d) or NUMERIC (i+d,d) |
S9(i)V9(d)DISPLAY | 488 | i+d in byte 1, d in byte 2 | NUMERIC(i+d,d) |
S9(i) BINARY or S9(i) COMP-4 where i is from 1 to 4 | 500 | 2 | SMALLINT |
S9(i) BINARY or S9(i) COMP-4 where i is from 5 to 9 | 496 | 4 | INTEGER |
S9(i) BINARY or S9(i) COMP-4 where i is from 10 to 18. Not supported by OPM COBOL. | 492 | 8 | BIGINT |
S9(i)V9(d) BINARY or S9(i)V9(d) COMP-4 where i+d ≤ 4 | 500 | i+d in byte 1, d in byte 2 | No exact equivalent use DECIMAL(i+d,d) or NUMERIC (i+d,d) |
S9(i)V9(d) BINARY or S9(i)V9(d) COMP-4 where 4 < i+d ≤ 9 | 496 | i+d in byte 1, d in byte 2 | No exact equivalent use DECIMAL(i+d,d) or NUMERIC (i+d,d) |
COMP-1 Not supported by OPM COBOL. | 480 | 4 | FLOAT(single precision) |
COMP-2 Not supported by OPM COBOL. | 480 | 8 | FLOAT(double precision) |
Fixed-length character data | 452 | m | CHAR(m) |
Varying-length character data | 448 | m | VARCHAR(m) |
Fixed-length graphic data Not supported by OPM COBOL. | 468 | m | GRAPHIC(m) |
Varying-length graphic data Not supported by OPM COBOL. | 464 | m | VARGRAPHIC(m) |
DATE Not supported by OPM COBOL. | 384 | DATE | |
TIME Not supported by OPM COBOL. | 388 | TIME | |
TIMESTAMP Not supported by OPM COBOL. | 392 | 26 | TIMESTAMP |
The following table can be used to determine the COBOL data type that is equivalent to a given SQL data type.
SQL data type | COBOL data type | Notes |
---|---|---|
SMALLINT | S9(m) COMP-4 | m is from 1 to 4 |
INTEGER | S9(m) COMP-4 | m is from 5 to 9 |
BIGINT | S9(m) COMP-4 for ILE COBOL. Not supported by OPM COBOL. | m is from 10 to 18 |
DECIMAL(p,s) | If p<64: S9(p-s)V9(s) PACKED-DECIMAL or S9(p-s)V9(s) COMP or S9(p-s)V9(s) COMP-3. If p>63: Not supported | p is precision; s is scale. 0<=s<=p<=63. If s=0, use S9(p) or S9(p)V. If s=p, use SV9(s). |
NUMERIC(p,s) | If p<19: S9(p-s)V9(s) DISPLAY If p>18: Not supported | p is precision; s is scale. 0<=s<=p<=18. If s=0, use S9(p) or S9(p)V. If s=p, use SV9(s). |
FLOAT(single precision) | COMP-1 for ILE COBOL. Not supported by OPM COBOL. | |
FLOAT(double precision) | COMP-2 for ILE COBOL. Not supported by OPM COBOL. | |
CHAR(n) | Fixed-length character string | 32766≥n≥1 |
VARCHAR(n) | Varying-length character string | 32740≥n≥1 |
CLOB | None | Use SQL TYPE IS to declare a CLOB for ILE COBOL. Not supported by OPM COBOL. |
GRAPHIC(n) | Fixed-length graphic string for ILE COBOL. Not supported by OPM COBOL. | 16383≥n≥1 |
VARGRAPHIC(n) | Varying-length graphic string for ILE COBOL. Not supported by OPM COBOL. | 16370≥n≥1 |
DBCLOB | None Not supported by OPM COBOL. | Use SQL TYPE IS to declare a DBCLOB for ILE COBOL.
|
BINARY | None | Use SQL TYPE IS to declare a BINARY.
|
VARBINARY | None | Use SQL TYPE IS to declare a VARBINARY.
|
BLOB | None Not supported by OPM COBOL. | Use SQL TYPE IS to declare a BLOB.
|
DATE | Fixed-length character string or DATE for ILE COBOL. | If the format is *USA, *JIS, *EUR, or *ISO, allow at least 10 characters. If the format is *YMD, *DMY, or *MDY, allow at least 8 characters. If the format is *JUL, allow at least 6 characters. |
TIME | Fixed-length character string or TIME for ILE COBOL. | Allow at least 6 characters; 8 to include seconds. |
TIMESTAMP | Fixed-length character string or TIMESTAMP for ILE COBOL. | n must be at least 19. To include microseconds at full precision, n must be 26. If n is less than 26, truncation occurs on the microseconds part. |
DATALINK | Not supported | |
ROWID | None | Use SQL TYPE IS to declare a ROWID. |
- Notes on COBOL variable declaration and usage
Any level 77 data description entry can be followed by one or more REDEFINES entries. However, the names in these entries cannot be used in SQL statements.
Parent topic:
Coding SQL statements in COBOL applications