Righe con dimensioni variabili

Quando l'ultima colonna di un record è una stringa, la riga può essere ridimensionata in modo variabile. Le dimensioni possono variare tra zero e la dimensione massima specificata nella clausola picture. Quando si dispone di righe di dimensioni variabili, l'applicazione deve specificare in modo esplicito le dimensioni di ogni riga prima dell'invio della riga.

Il campo dimensioni effettive non è visibile sul lato Automazione. L'ambiente di runtime di Transaction Integrator (TI) usa i servizi di automazione per determinare le dimensioni dei dati di input. Quando l'ambiente di runtime TI invia i dati all'host, imposta automaticamente il campo delle dimensioni effettive.

L'Importazione guidata COBOL non crea mai un recordset con dimensioni variabili. Visualizzare le proprietà per il recordset che contiene le righe di dimensioni variabili. La proprietà Righe con dimensioni variabili consente all'utente di configurare manualmente questa opzione per un recordset specifico. La proprietà Righe con dimensioni variabili offre opzioni avanzate. È possibile specificare che la variabile di dimensioni effettive della riga è un file binario di mezza parola o full-word. La variabile di dimensione effettiva includerà se stessa o includerà solo le dimensioni della riga.

Nell'esempio di COBOL seguente viene illustrato come l'applicazione host invia righe di dimensioni variabili. Il campo lunghezza è incluso nelle dimensioni della riga:

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.  
  

Nell'esempio di COBOL seguente viene illustrato come l'applicazione host invia righe di dimensioni variabili. Il campo di lunghezza non è incluso nelle dimensioni della riga:

       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.  
  

Vedere anche

Definizione di una tabella a lunghezza variabile con la clausola OCCURS DEPENDING
Stringhe con dimensioni variabili
Campi finali con vincoli