Database does not really like fields/columns that are not well defined.
Following is an example of what you can do using GnuCOBOL XFD (trunk and hopefully soon to be 4.0)
FD TSPFILE
BLOCK CONTAINS 5 RECORDS.
$XFD NAME=tspfilesql DROP FILLER
01 TSPFL-RECORD.
05 TSPFL-REC.
$XFD USE GROUP CUSTNUM
10 CM-CUST-NUM.
15 CM-CUST-PRE PICTURE X(3).
15 CM-CUST-NNN PICTURE X(5).
10 CM-STATUS PICTURE X.
10 CM-COMPANY PICTURE X(25).
$XFD USE GROUP VAR_LENGTH custaddr
10 CM-ADDRESS.
15 CM-ADDRESS-1 PICTURE X(25).
15 CM-ADDRESS-2 PICTURE X(25).
15 CM-ADDRESS-3 PICTURE X(25).
10 CM-TELEPHONE PICTURE 9(10).
10 CM-DP-MGR PICTURE X(25).
10 CM-MACHINE PICTURE X(8).
10 CM-MEMORY PICTURE X(4).
$XFD WHEN (CM-STATUS = 'A' && CM-TELEPHONE > 100)
$XFD AND CM-MACHINE = 'B' || CM-COMPANY = ' '
10 CM-MEMORYX REDEFINES CM-MEMORY.
15 CM-MEMSZ PICTURE 9(2).
15 CM-MEMUNIT PICTURE X(2).
10 CM-DISK PICTURE X(8).
10 CM-TAPE PICTURE X(8).
The creates a table definition as follows:
CREATE TABLE tspfilex (
custnum CHAR(8) NOT NULL,
status CHAR(1),
company CHAR(25),
custaddr VARCHAR(75),
telephone DECIMAL(10) NOT NULL,
dp_mgr CHAR(25) NOT NULL,
machine CHAR(8) NOT NULL,
memory CHAR(4),
memsz DECIMAL(2),
memunit CHAR(2),
disk CHAR(8) NOT NULL,
tape CHAR(8),
);
CREATE UNIQUE INDEX pk_tspfilex ON tspfilex (custnum);
CREATE INDEX k1_tspfilex ON tspfilex (telephone,machine);
Then your COBOL code just uses normal COBOL I/O READ/WRITE etc...