ContentsIndexPreviousNext

6.1.1 Approach One

You can compile the preceding program as is with the -Fx option, to generate the data dictionary. The compiled program will run, and will build the database table shown at the end of this section.

Here's how the database table is built. First, any fields listed in the KEY IS clause of the SELECT are included (p-o-number in this example). Then the compiler takes the largest record (p-o-detail-record), and lists the fields that make up that record. The next two pages show the specific fields that are placed into the table.

All of the data from the COBOL program is stored in and retrieved from the database, even though not all fields are explicitly named in the database table. See Chapter 3, "Data Dictionaries" for a description of how this works.

The underlined fields are the only ones that will be entered into the table:

fd p-o-file.
01 p-o-record.
   03      p-o-division-number                  pic 9(3).
   03      p-o-record-type                       pic x.
      88 header-record                        value "h".
      88 detail-record                        value "d".
   03      p-o-number                           pic 9(10).
   03      p-o-number-detail redefines p-o-number.
      05      picking-ticket-number             pic 9(6).
      05      shipping-region                   pic 9(2).
      05      p-o-customer-type                 pic 9(2).
      05      p-o-customer-breakdown redefines
              p-o-customer-type.
            07 customer-category                pic x.
               88 p-o-customer-retail         value "r".
               88 p-o-customer-whlsale        value "w".
            07 customer-pay-format              pic x.
               88 is-net-30                   value "3".
               88 is-net-10                   value "1".
   03      p-o-date.
      05      p-o-yy                            pic 9(2).
      05      p-o-mm                            pic 9(2).
      05      p-o-dd                            pic 9(2).

01      p-o-detail-record.
   03      p-o-dept-number                       pic 9(3).
   03      p-o-record-type                       pic x.
   03      detail-p-o-number                    pic 9(10).
   03      p-o-shipping-info.
      05      p-o-quantity-to-ship              pic s9(4) comp.
      05      p-o-total-quantity                pic s9(4) comp.
   03      p-o-notes.
      05      notes-line occurs 3 times         pic x(40).

As the table is built:

4gl90003.gif Any hyphens in the COBOL field names are converted to underscores.

4gl90003.gif Field names longer than 18 characters will issue a warning if they are not unique within the first 18 characters. Some databases, Informix for example, limit you to 18 total characters. It is recommended for portability and for end-user purposes, that you use the least amount of characters. You can use the NAME directive for this to avoid changing your procedure division code.

4gl90003.gif Fields in OCCURS clauses get special handling, because the runtime system must assign a unique name to each data item. So sequential index numbers are appended to the item named in the OCCURS. Because the indexed name cannot exceed 30 (30 is the limit for Oracle; 18 is the limit for Informix and DBMaker) characters, the name is truncated by Acu4GL if necessary before the index is added.


Note: detail-p-o-number is not part of the table, because the key overlays this area.
This table is built in the database:

Column Name
Type
p_o_number
number(10) *
p_o_dept_number
number(3) *
p_o_record_type
char(1)
p_o_quantity_to_ship
number(4) *
p_o_total_quantity
number(4) *
notes_line_1
char(40)
notes_line_2
char(40)
notes_line_3
char(40)

* The actual database datatype may vary. For example, DBMaker would use decimal (10, 0), smallint, smallint, smallint.

See the "Limits and Ranges" section found in the appendix specific to your RDBMS for a list of supported data types and their COBOL equivalents.