Determine 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.

Table 1. COBOL declarations mapped to typical SQL data types
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 for COBOL for iSeries™.
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 for COBOL for iSeries.
480 4 FLOAT(single precision)
COMP-2

Not supported for COBOL for iSeries.
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 for COBOL for iSeries.
468 m GRAPHIC(m)
Varying-length graphic data

Not supported for COBOL for iSeries.
464 m VARGRAPHIC(m)
DATE

Not supported for COBOL for iSeries.
384   DATE
TIME

Not supported for COBOL for iSeries.
388   TIME
TIMESTAMP

Not supported for COBOL for iSeries.
392 26 TIMESTAMP

The following table can be used to determine the COBOL data type that is equivalent to a given SQL data type.

Table 2. SQL data types mapped to typical COBOL declarations
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 for iSeries.

Not supported for COBOL for iSeries.
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 for iSeries.

Not supported for COBOL for iSeries.
 
FLOAT(double precision) COMP-2 for ILE COBOL for iSeries.

Not supported for COBOL for iSeries.
 
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 for iSeries.

Not supported for COBOL for iSeries.
GRAPHIC(n) Fixed-length graphic string for ILE COBOL for iSeries.

Not supported for COBOL for iSeries.
16383≥n≥1
VARGRAPHIC(n) Varying-length graphic string for ILE COBOL for iSeries.

Not supported for COBOL for iSeries.
16370≥n≥1
DBCLOB None Use SQL TYPE IS to declare a DBCLOB for ILE COBOL for iSeries.

BINARY None Use SQL TYPE IS to declare a BINARY.

VARBINARY None Use SQL TYPE IS to declare a VARBINARY.

BLOB None Use SQL TYPE IS to declare a BLOB.

DATE Fixed-length character string or DATE for ILE COBOL for iSeries. 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 for iSeries. Allow at least 6 characters; 8 to include seconds.
TIMESTAMP Fixed-length character string or TIMESTAMP for ILE COBOL for iSeries. 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.