順次ファイルにエクスポートしたデータを記述するコピーブックを定義する方法
シナリオ: Db2® 表にデータがあり、FM/Db2 エクスポート・ユーティリティーを使用して、 データを順次ファイルにコピーしていました。エクスポートしたデータを記述するコピーブックを定義する必要があります。
コピーブックを、COBOL、HLASM、または PL/I のいずれかでコーディングする必要があります。Db2® データ・タイプごとのエクスポート・データ・セットに必要なスペースの量は、次の例で要約しています。
- 以下の定義を使用して作成した表からデータをエクスポートする必要があるものとします。
エクスポートしたデータを記述する COBOL コピーブックは次のとおりです。CREATE TABLE SAMPLE.EXPORT_EX (COL1 INTEGER NOT NULL ,COL2 SMALLINT NOT NULL ,COL3 FLOAT(21) NOT NULL ,COL4 FLOAT(53) NOT NULL ,COL5 DECIMAL(1,0) NOT NULL ,COL6 DECIMAL(15,7) NOT NULL ,COL7 CHAR(10) NOT NULL ,COL8 VARCHAR(10) NOT NULL ,COL9 DATE NOT NULL ,COL10 TIME NOT NULL ,COL11 TIMESTAMP NOT NULL ,COL12 ROWID GENERATED ALWAYS NOT NULL )
HLASM では、コピーブックは次のようになります。01 EXPORT-EXAMPLE. * INTEGER DATA TYPE 10 COL1 PIC S9(6) USAGE COMP. * SMALLINT DATA TYPE 10 COL2 PIC S9(4) USAGE COMP. * FLOATING POINT (4 BYTES) DATA TYPE 10 COL3 USAGE COMP-1. * FLOATING POINT (8 BYTES) DATA TYPE 10 COL4 USAGE COMP-2. * PACKED DECIMAL DATA TYPE 10 COL5 PIC S9(1)V USAGE COMP-3. 10 FILLER PIC X(15). * PACKED DECIMAL DATA TYPE 10 COL6 PIC S9(8)V9(7) USAGE COMP-3. 10 FILLER PIC X(8). * CHARACTER DATA TYPE 10 COL7 PIC X(10). * VARCHAR DATA TYPE 10 COL8. 49 COL8-LEN PIC S9(4) USAGE COMP. 49 COL8-TEXT PIC X(10). * DATE DATA TYPE 10 COL9 PIC X(10). * TIME DATA TYPE 10 COL10 PIC X(8). * TIMESTAMP DATA TYPE 10 COL11 PIC X(26). * ROWID DATA TYPE 10 COL12. 49 COL12-LEN PIC S9(4) USAGE COMP. 49 COL12-TEXT PIC X(40).
PL/I では、コピーブックは次のようになります。EXAMPLE DSECT * Integer data type COL1 DS F * Smallint data type COL2 DS H * Floating point (4 bytes) data type COL3 DS E * Floating point (8 bytes) data type COL4 DS D * Packed decimal data type (1 byte) COL5 DS PL1 * Packed decimal data type (8 bytes) COL6 DS PL8 * Character data type COL7 DS CL10 * VARCHAR data type COL8_LEN DS H COL8_TXT DS CL10 * DATE data type COL9 DS CL10 * TIME data type COL10 DS CL8 * TIMESTAMP data type COL11 DS CL26 * ROWID data type COL12_LEN DS H COL12_TXT DS CL40 END
DCL 1 EXPORT_EXAMPLE UNALIGNED, /* INTEGER DATA TYPE */ 2 COL1 BIN(31,0), /* SMALLINT DATA TYPE */ 2 COL2 BIN(15,0), /* FLOATING POINT (4 BYTES) DATA TYPE */ 2 COL3 FLOAT, /* FLOATING POINT (8 BYTES) DATA TYPE */ 2 COL4 FLOAT(8), /* PACKED DECIMAL DATA TYPE */ 2 COL5 FIXED DEC(1,0), 2 COL5_PAD CHAR(15), /* PACKED DECIMAL DATA TYPE */ 2 COL6 FIXED DEC(15,7), 2 COL6_PAD CHAR(8), /* CHARACTER DATA TYPE */ 2 COL7 CHAR(10), /* VARCHAR DATA TYPE */ 2 COL8, 3 COL8_LEN BIN(15,0), 3 COL8_TEXT CHAR(10), /* DATE DATA TYPE */ 2 COL9 CHAR(10), /* TIME DATA TYPE */ 2 COL10 CHAR(8), /* TIMESTAMP DATA TYPE */ 2 COL11 CHAR(26), /* ROWID DATA TYPE */ 2 COL12, 3 COL12_LEN BIN(15,0), 3 COL12_TEXT CHAR(40);
以下の点に注意してください。- Db2® データ・タイプ
- エクスポートされたデータ・セットではスペース。
- INTEGER
- 4 バイト。
- SMALLINT
- 2 バイト。
- REAL (4 バイト)
- 4 バイト。
- FLOAT (8 バイト)
- 8 バイト。
- パック 10 進数
- 合計で 16 バイト。データは左寄せされます。未使用バイトには、2 進ゼロが入ります。DECIMAL(n,m) フィールドは、16 バイトのフィールド内の TRUNC(n/2) + 1 バイト分を占めます。
- CHAR(n)
- n バイト。
- VARCHAR(n)
- n+2 バイト。データの前に、VARCHAR フィールド内の文字数が入った 2 バイトの 2 進数フィールドが置かれます。
- DATE
- 10 バイト。注 1 を参照してください。
- TIME
- 8 バイト。注 1 を参照してください。
- TIMESTAMP
- 26 バイト。
- ROWID
- 42 バイト。VARCHAR(40) 列に関して ROWID 列を定義します。
注:- 日付または時刻の出口が使用中の場合、DATE フィールドおよび TIME フィールドに必要な長さは異なる場合があります。
- Db2® 表にヌルを許可する列があり、以下の定義を使用して作成されている場合は、
エクスポートしたデータを記述する COBOL コピーブックは次のとおりです。CREATE TABLE SAMPLE.EXPORT_EX_NULL (COL1 INTEGER ,COL2 SMALLINT ,COL3 FLOAT(21) ,COL4 FLOAT(53) ,COL5 DECIMAL(1,0) ,COL6 DECIMAL(15,7) ,COL7 CHAR(10) ,COL8 VARCHAR(10) ,COL9 DATE ,COL10 TIME ,COL11 TIMESTAMP ,COL12 ROWID GENERATED ALWAYS NOT NULL )
HLASM では、コピーブックは次のようになります。01 EXPORT-EXAMPL2. * INTEGER DATA TYPE WITH NULL INDICATOR 10 COL1-NULL PIC S9(4) USAGE COMP. 10 COL1 PIC S9(6) USAGE COMP. * SMALLINT DATA TYPE WITH NULL INDICATOR 10 COL2-NULL PIC S9(4) USAGE COMP. 10 COL2 PIC S9(4) USAGE COMP. * FLOATING POINT (4 BYTES) DATA TYPE WITH NULL INDICATOR 10 COL3-NULL PIC S9(4) USAGE COMP. 10 COL3 USAGE COMP-1. * FLOATING POINT (8 BYTES) DATA TYPE WITH NULL INDICATOR 10 COL4-NULL PIC S9(4) USAGE COMP. 10 COL4 USAGE COMP-2. * PACKED DECIMAL DATA TYPE WITH NULL INDICATOR 10 COL5-NULL PIC S9(4) USAGE COMP. 10 COL5 PIC S9(1)V USAGE COMP-3. 10 FILLER PIC X(15). * PACKED DECIMAL DATA TYPE WITH NULL INDICATOR 10 COL6-NULL PIC S9(4) USAGE COMP. 10 COL6 PIC S9(8)V9(7) USAGE COMP-3. 10 FILLER PIC X(8). * CHARACTER DATA TYPE WITH NULL INDICATOR 10 COL7-NULL PIC S9(4) USAGE COMP. 10 COL7 PIC X(10). * VARCHAR DATA TYPE WITH NULL INDICATOR 10 COL8-NULL PIC S9(4) USAGE COMP. 10 COL8. 49 COL8-LEN PIC S9(4) USAGE COMP. 49 COL8-TEXT PIC X(10). * DATE DATA TYPE WITH NULL INDICATOR 10 COL9-NULL PIC S9(4) USAGE COMP. 10 COL9 PIC X(10). * TIME DATA TYPE WITH NULL INDICATOR 10 COL10-NULL PIC S9(4) USAGE COMP. 10 COL10 PIC X(8). * TIMESTAMP DATA TYPE WITH NULL INDICATOR 10 COL11-NULL PIC S9(4) USAGE COMP. 10 COL11 PIC X(26). * ROWID DATA TYPE 10 COL12. 49 COL12-LEN PIC S9(4) USAGE COMP. 49 COL12-TEXT PIC X(40).
PL/I では、コピーブックは次のようになります。EXAMPLE2 DSECT * Integer data type with null indicator COL1_NI DS H COL1 DS F * Smallint data type with null indicator COL2_NI DS H COL2 DS H * Floating point (4 bytes) data type with null indicator COL3_NI DS H COL3 DS E * Floating point (8 bytes) data type with null indicator COL4_NI DS H COL4 DS D * Packed decimal data type (1 byte) with null indicator COL5_NI DS H COL5 DS PL1 * Packed decimal data type (8 bytes) with null indicator COL6_NI DS H COL6 DS PL8 * Character data type with null indicator COL7_NI DS H COL7 DS CL10 * VARCHAR data type with null indicator COL8_NI DS H COL8_LEN DS H COL8_TXT DS CL10 * DATE data type with null indicator COL9_NI DS H COL9 DS CL10 * TIME data type with null indicator COL10_NI DS H COL10 DS CL8 * TIMESTAMP data type with null indicator COL11_NI DS H COL11 DS CL26 * ROWID data type COL12_LEN DS H COL12_TXT DS CL40 END
最初と 2 番目の定義セットの違いは、Db2® ヌル値を許可している列の列定義の 直前に 2 バイトの 2 進数フィールドが追加されている点だけです。DCL 1 EXPORT_EXAMPLE UNALIGNED, /* INTEGER DATA TYPE WITH NULL INDICATOR */ 2 COL1_NULL BIN(15,0), 2 COL1 BIN(31,0), /* SMALLINT DATA TYPE WITH NULL INDICATOR */ 2 COL2_NULL BIN(15,0), 2 COL2 BIN(15,0), /* FLOATING POINT (4 BYTES) DATA TYPE WITH NULL INDICATOR */ 2 COL3_NULL BIN(15,0), 2 COL3 FLOAT, /* FLOATING POINT (8 BYTES) DATA TYPE WITH NULL INDICATOR */ 2 COL4_NULL BIN(15,0), 2 COL4 FLOAT(8), /* PACKED DECIMAL DATA TYPE WITH NULL INDICATOR */ 2 COL5_NULL BIN(15,0), 2 COL5 FIXED DEC(1,0), 2 COL5_PAD CHAR(15), /* PACKED DECIMAL DATA TYPE WITH NULL INDICATOR */ 2 COL6_NULL BIN(15,0), 2 COL6 FIXED DEC(15,7), 2 COL6_PAD CHAR(8), /* CHARACTER DATA TYPE WITH NULL INDICATOR */ 2 COL7_NULL BIN(15,0), 2 COL7 CHAR(10), /* VARCHAR DATA TYPE WITH NULL INDICATOR */ 2 COL8_NULL BIN(15,0), 2 COL8, 3 COL8_LEN BIN(15,0), 3 COL8_TEXT CHAR(10), /* DATE DATA TYPE WITH NULL INDICATOR */ 2 COL9_NULL BIN(15,0), 2 COL9 CHAR(10), /* TIME DATA TYPE WITH NULL INDICATOR */ 2 COL10_NULL BIN(15,0), 2 COL10 CHAR(8), /* TIMESTAMP DATA TYPE WITH NULL INDICATOR */ 2 COL11_NULL BIN(15,0), 2 COL11 CHAR(26), /* ROWID DATA TYPE */ 2 COL12, 3 COL12_LEN BIN(15,0), 3 COL12_TEXT CHAR(40);
関連するタスク
関連する参照先