Visual COBOL 2.3 Update 2 から、Micro Focus MBDT DSNUTILB では、単一パーティションの範囲内でのパーティション テーブルとの間におけるデータ移動について、DB2 LUW のサポートされているすべての IBM バージョンの DB2 LUW テーブル パーティション機能をサポートしています。
LOAD も、UNLOAD も、1 つの JCL ジョブ内でのパーティション テーブルの複数パーティションとの間における並列データ移動はサポートしていません。
パーティション テーブルの単一パーティションにデータをロードするには、JCL の制御文で PART n オプションを指定します。次に例を示します。
//DB2LDPAR JOB //DSNUTILB EXEC PGM=TSTUTILB,PARM='DB2C,SH ' //* //SYSPRINT DD SYSOUT=* //UTPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //STPRIN01 DD SYSOUT=* //IDIOFF DD DUMMY //* //SYSUT1 DD DISP=MOD,DSN=SH.DSNUTILB.SYSUT1 //SORTOUT DD DISP=MOD,DSN=SH.DSNUTILB.SYSOUT //SYSMAP DD DISP=MOD,DSN=SH.DSNUTILB.SYSMAP //SYSERR DD DISP=MOD,DSN=SH.DSNUTILB.SYSERR //SYSREC DD DISP=SHR,DSN=MCSDB2.UNLOAD.ULDB2EMP //SYSIN DD * LOAD DATA INDDN(SYSREC) ASCII INTO TABLE TEST.EMPLOYEE PART 1 REPLACE WHEN(00001:00002) = X'0001' ( "EMPNO" POSITION( 00003:00008) CHAR(00006) , "FIRSTNME" POSITION( 00009:00022) VARCHAR , "MIDINIT" POSITION( 00024:00024) CHAR(00001) NULLIF(00023)=X'FF' , "LASTNAME" POSITION( 00025:00041) VARCHAR , "WORKDEPT" POSITION( 00043:00045) CHAR(00003) NULLIF(00042)=X'FF' , "PHONENO" POSITION( 00047:00050) CHAR(00004) NULLIF(00046)=X'FF' , "HIREDATE" POSITION( 00052:00061) DATE EXTERNAL NULLIF(00051)=X'FF' , "JOB" POSITION( 00063:00070) CHAR(00008) NULLIF(00062)=X'FF' , "EDLEVEL" POSITION( 00071:00072) SMALLINT , "SEX" POSITION( 00074:00074) CHAR(00001) NULLIF(00073)=X'FF' , "BIRTHDATE" POSITION( 00076:00085) DATE EXTERNAL NULLIF(00075)=X'FF' , "SALARY" POSITION( 00087:00091) DECIMAL NULLIF(00086)=X'FF' , "BONUS" POSITION( 00093:00097) DECIMAL NULLIF(00092)=X'FF' , "COMM" POSITION( 00099:00103) DECIMAL NULLIF(00098)=X'FF' ) /* //
JCL の構文およびパーティション番号は、メインフレームの DB2 規則に従います。パーティション番号は 1 を基準としますが、DB2 LUW での番号は 0 を基準とします。MBDT DSNUTILB では、この 2 つの規則を内部的に変換します。実行された JCL ジョブは、DB2 LUW のパーティション 0 にデータ セットをロードします。
パーティション テーブルの単一パーティションからデータをアンロードするには、次の 2 つの形式で JCL の制御文で PART n オプションを指定します。
UNLOAD TABLESPACE tabespacename PART n FROM TABLE tablename
UNLOAD TABLESPACE tabespacename PART n
//ULDB2PAR JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID,REGION=0M /*JOBPARM SYSAFF=ANY //DELETE EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE MCSDB2.UNLOAD.ULDB2PAR SET MAXCC=0 //*------------------------------------------------------------------ //* EXECUTE DSNUPROC //*------------------------------------------------------------------ //DSNUTILB EXEC PGM=TSTUTILB,PARM='DB2C,ULDB2PAR’ //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(10,10)) //SORTOUT DD UNIT=SYSDA,SPACE=(CYL,(10,10)) //SYSPRINT DD SYSOUT=* //UTPRINT DD SYSOUT=* //SYSPUNCH DD SYSOUT=* //SYSREC DD DSN=MCSDB2.UNLOAD.ULDB2PAR,DISP=(MOD,CATLG), // UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSIN DD * UNLOAD TABLESPACE PARTSPACE1 PART 1 FROM TABLE XINYUC.EMPLOYEE2 /* //
繰り返しになりますが、パーティション番号の規則はメインフレームの DB2 規則に従います。JCL では PART 1 を指定しますが、DB2 LUW での実際のパーティション番号は 0 になります。JCL で指定されたパンチ カードが実行後に生成されます。アンロード データ セット MCSDB2.UNLOAD.ULDB2PAR は、DSNUTILB によって自動的にカタログ化されます。デフォルトのコード セットは ASCII であり、必要に応じて EBCDIC に変更できます。