共用方式為


大小可變的資料列

當記錄中的最後一個資料行是字串時,資料列可以可變大小。 其大小可能會因圖片子句中指定的大小上限而有所不同。 當您有可變大小的資料列時,您的應用程式必須在傳送資料列之前明確指定每個資料列的大小。

在自動化端看不到實際的大小欄位。 交易整合器 (TI) 執行時間環境會使用自動化服務來判斷輸入資料的大小。 當 TI 執行時間環境將資料傳送至主機時,它會自動設定實際的大小欄位。

匯入 COBOL 精靈永遠不會建立具有可變大小資料列的記錄集。 顯示包含可變大小資料列之記錄集的屬性。 [可變大小的資料列] 屬性可讓使用者針對特定記錄集手動設定此選項。 [可變大小的資料列] 屬性提供進階選項。 您可以指定實際的資料列大小變數是半字或全字二進位。 實際的大小變數將包含本身,或只會包含資料列的大小。

下列 COBOL 範例示範主應用程式如何傳送可變大小的資料列。 長度欄位包含在資料列大小中:

01  CUSTOMER-DATA.  
    05  CUSTOMER-NUMBER                  PIC 9(9).  
    05  LAST-NAME                        PIC X(20).  
    05  FIRST-NAME                       PIC X(20).  
    05  INVOICE-COUNT                    PIC 9(7) COMP-3.  
    05  INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.  
        10  INVOICE-DATA.  
            15  INVOICE-ROW-SIZE         PIC S9(4) COMP.  
             15  INVOICE-NUMBER           PIC 9(10).  
             15  INVOICE-DATE             PIC 9(7) COMP-3.  
             15  INVOICE-AMOUNT           PIC S9(13)V9(2) COMP-3.  
         10  INVOICE-DESCRIPTION          PIC X(4096).  
.  
.  
.  
            MOVE LENGTH OF CUSTOMER-DATA TO SEND-LENGTH.  
            SUBTRACT LENGTH OF INVOICES FROM SEND-LENGTH.  
            EXEC-CICS SEND FROM(CUSTOMER-DATA)  
                           LENGTH(SEND-LENGTH)  
                           END-EXEC.  
  
            PERFORM VARYING ROW FROM 1 BY 1 UNTIL ROW > INVOICE-COUNT  
                INSPECT INVOICE-DESCRIPTION TALLYING INVOICE-ROW-SIZE  
                    FOR CHARACTERS BEFORE INITIAL '   '  
                ADD LENGTH OF INVOICE-DATA TO INVOICE-ROW-SIZE  
                EXEC-CICS SEND FROM(INVOICE-ROW-SIZE)  
                               LENGTH(2)  
                               END-EXEC  
                EXEC-CICS SEND FROM(INVOICES(ROW))  
                               LENGTH(INVOICE-ROW-SIZE)  
                               END-EXEC  
            END-PERFORM.  
  

下列 COBOL 範例示範主應用程式如何傳送可變大小的資料列。 長度欄位不包含在資料列大小中:

       01  CUSTOMER-DATA.  
          05  CUSTOMER-NUMBER                  PIC 9(9).  
          05  LAST-NAME                        PIC X(20).  
          05  FIRST-NAME                       PIC X(20).  
          05  INVOICE-COUNT                    PIC 9(7) COMP-3.  
          05  INVOICE-ROW-SIZE                 PIC S9(4) COMP.  
         05  INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.  
             10  INVOICE-DATA.  
                  15  INVOICE-NUMBER           PIC 9(10).  
                  15  INVOICE-DATE             PIC 9(7) COMP-3.  
                  15  INVOICE-AMOUNT           PIC S9(13)V9(2) COMP-3.  
              10  INVOICE-DESCRIPTION          PIC X(4096).  
.  
.  
.  
            MOVE SIZE OF CUSTOMER-DATA TO SEND-LENGTH.  
            SUBTRACT LENGTH OF INVOICES FROM SEND-LENGTH.  
            SUBTRACT LENGTH OF INVOICE-ROW-SIZE FROM SEND-LENGTH.  
            EXEC-CICS SEND FROM(CUSTOMER-DATA)  
                           LENGTH(SEND-LENGTH)  
                           END-EXEC.  
  
            PERFORM VARYING ROW FROM 1 BY 1 UNTIL ROW > INVOICE-COUNT  
                INSPECT COMMENTS TALLYING INVOICE-ROW-SIZE  
                    FOR CHARACTERS BEFORE INITIAL '   '  
                ADD LENGTH OF INVOICE-DATA TO INVOICE-ROW-SIZE  
                EXEC-CICS SEND FROM(INVOICE-ROW-SIZE)  
                               LENGTH(LENGTH OF INVOIVE-ROW-SIZE)  
                               END-EXEC  
  
                EXEC-CICS SEND FROM(INVOICES(ROW))  
                               LENGTH(INVOICE-ROW-SIZE)  
                               END-EXEC  
            END-PERFORM.  
  

另請參閱

使用 OCCURS DEPENDING 子句定義可變長度資料表
大小可變的字串
繫結的最後一個欄位