The BINARY-LONG data type in COBOL represents a specialized 32-bit integer format designed for seamless interoperability with C programming language applications, specifically matching the characteristics of C's long data type on 32-bit platforms. This data type provides a consistent 32-bit integer representation regardless of the platform, making it ideal for applications requiring fixed-size integer values for database integration, file processing, network communication, and cross-platform data exchange where predictable size and range are essential for maintaining data integrity across different systems.
BINARY-LONG provides a fixed 32-bit integer representation (4 bytes) that matches the traditional C long data type on 32-bit systems. Unlike BINARY-C-LONG which varies by platform, BINARY-LONG maintains consistent size across all platforms, making it ideal for portable data structures.
123456789101112131415161718192021DATA DIVISION. WORKING-STORAGE SECTION. 01 DATABASE-KEYS. 05 CUSTOMER-ID USAGE BINARY-LONG. 05 ORDER-NUMBER USAGE BINARY-LONG. 05 PRODUCT-CODE USAGE BINARY-LONG. 05 TRANSACTION-ID USAGE BINARY-LONG. 01 COUNTERS-AND-LIMITS. 05 RECORD-COUNT USAGE BINARY-LONG. 05 MAX-RECORDS USAGE BINARY-LONG VALUE 1000000. 05 BUFFER-SIZE USAGE BINARY-LONG VALUE 8192. 01 SIGNED-VALUES. 05 BALANCE-OFFSET PIC S9(10) USAGE BINARY-LONG. 05 DELTA-AMOUNT PIC S9(10) USAGE BINARY-LONG. PROCEDURE DIVISION. MOVE 123456789 TO CUSTOMER-ID. MOVE 987654321 TO ORDER-NUMBER. MOVE 0 TO RECORD-COUNT.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657*> Database operations with BINARY-LONG keys DATA DIVISION. WORKING-STORAGE SECTION. 01 DB-RECORD-STRUCTURE. 05 PK-ID USAGE BINARY-LONG. 05 FK-CUSTOMER-ID USAGE BINARY-LONG. 05 FK-PRODUCT-ID USAGE BINARY-LONG. 05 QUANTITY USAGE BINARY-LONG. 05 UNIT-PRICE PIC S9(7)V99 COMP-3. 05 TOTAL-AMOUNT PIC S9(9)V99 COMP-3. 01 QUERY-PARAMETERS. 05 START-ID USAGE BINARY-LONG. 05 END-ID USAGE BINARY-LONG. 05 BATCH-SIZE USAGE BINARY-LONG VALUE 1000. 01 SEQUENCE-GENERATORS. 05 NEXT-ORDER-ID USAGE BINARY-LONG. 05 NEXT-CUSTOMER-ID USAGE BINARY-LONG. 05 LAST-SEQUENCE USAGE BINARY-LONG. PROCEDURE DIVISION. GENERATE-NEW-ORDER-ID. *> Get next sequence value CALL "get_next_sequence" USING BY REFERENCE "ORDER_SEQ" BY REFERENCE NEXT-ORDER-ID END-CALL. MOVE NEXT-ORDER-ID TO PK-ID. DISPLAY "Generated Order ID: " PK-ID. BATCH-PROCESS-RECORDS. MOVE 1 TO START-ID. MOVE 1000 TO END-ID. PERFORM UNTIL START-ID > 1000000 CALL "process_batch" USING BY VALUE START-ID BY VALUE END-ID BY VALUE BATCH-SIZE END-CALL ADD BATCH-SIZE TO START-ID ADD BATCH-SIZE TO END-ID END-PERFORM. SEARCH-BY-RANGE. MOVE 100000 TO START-ID. MOVE 200000 TO END-ID. EXEC SQL SELECT customer_id, order_number, total_amount FROM orders WHERE order_id BETWEEN :START-ID AND :END-ID ORDER BY order_id END-EXEC.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950*> File processing with BINARY-LONG DATA DIVISION. WORKING-STORAGE SECTION. 01 FILE-HEADER. 05 MAGIC-NUMBER USAGE BINARY-LONG VALUE X"12345678". 05 VERSION-NUMBER USAGE BINARY-LONG VALUE 1. 05 RECORD-COUNT USAGE BINARY-LONG. 05 FILE-SIZE USAGE BINARY-LONG. 05 CHECKSUM USAGE BINARY-LONG. 01 INDEX-ENTRY. 05 RECORD-ID USAGE BINARY-LONG. 05 OFFSET-POSITION USAGE BINARY-LONG. 05 RECORD-LENGTH USAGE BINARY-LONG. 05 STATUS-FLAGS USAGE BINARY-LONG. 01 PROCESSING-STATS. 05 RECORDS-PROCESSED USAGE BINARY-LONG. 05 ERRORS-FOUND USAGE BINARY-LONG. 05 WARNINGS-COUNT USAGE BINARY-LONG. 05 ELAPSED-TIME USAGE BINARY-LONG. PROCEDURE DIVISION. WRITE-FILE-HEADER. MOVE 0 TO RECORD-COUNT. MOVE 0 TO FILE-SIZE. WRITE FILE-HEADER-RECORD FROM FILE-HEADER. DISPLAY "File header written:". DISPLAY " Magic: " MAGIC-NUMBER. DISPLAY " Version: " VERSION-NUMBER. CREATE-INDEX-ENTRY. ADD 1 TO RECORD-COUNT. MOVE RECORD-COUNT TO RECORD-ID. MOVE WS-CURRENT-POSITION TO OFFSET-POSITION. MOVE WS-RECORD-LENGTH TO RECORD-LENGTH. MOVE 0 TO STATUS-FLAGS. WRITE INDEX-RECORD FROM INDEX-ENTRY. CALCULATE-STATISTICS. DIVIDE ELAPSED-TIME BY 1000 GIVING WS-SECONDS. DIVIDE RECORDS-PROCESSED BY WS-SECONDS GIVING WS-RATE. DISPLAY "Processing Statistics:". DISPLAY " Records: " RECORDS-PROCESSED. DISPLAY " Errors: " ERRORS-FOUND. DISPLAY " Rate: " WS-RATE " records/second".
BINARY-LONG is always 32 bits (4 bytes) regardless of platform, while BINARY-C-LONG matches the C long type which varies by platform (32-bit on 32-bit systems, 64-bit on 64-bit systems). Use BINARY-LONG for consistent portable data structures.
For signed BINARY-LONG, the maximum value is 2,147,483,647. For unsigned, it's 4,294,967,295. If you need larger values, consider using BINARY-C-LONG on 64-bit platforms or multiple fields for extended precision.