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