UNLOAD ユーティリティーを使用して、データを現状のまま EBCDIC または ASCII データ・セットにアンロードします。 次に、新規 Unicode 表へのデータの LOAD を実行します。 LOAD ステートメントに適切なコード化スキーム・キーワード (ASCII、EBCDIC、または CCSID) を指定してください。推奨: UNLOADユーティリティのPUNCHDDNオプションを使用して、 Db2 がデータをアンロードする際に、対応するLOADユーティリティステートメントを生成します。
以下に示すサンプル JCL は、次のアクションを実行します。
- STEP1 で、2 つの表が作成され、データが取り込まれます。 T1 は Unicode 表です。 T2 は EBCDIC 表です。
- STEP2 で、EBCDIC 表 T2 からデータがアンロードされます。 UNLOAD ステートメントには PUNCHDDN オプションが指定されています。 このオプションにより、(SYSPUNCH データ・セット内に) データを元の表 T2 にロードして戻すための対応する LOAD ステートメントが生成されます。 このSYSPUNCHファイルを使用して、テーブル T1 にロードされていないデータをロードするには、SYSPUNCHまたはJCLを変更する必要があります。
- STEP3 で、STEP2 でアンロードされたデータが Unicode 表 T1 にロードされます。 カタログでテーブルがUnicodeとして定義されているため、データが読み込まれる際にUnicodeに変換されます。
- STEP4 で、両方の表の現行データが出力されます。
//STEP1 EXEC TSOBATCH
//SYSTSIN DD *
DSN S(SSTR) R(1) T(1)
RUN PROGRAM DSNTEP2 PLAN(DSNTEPD1)
END
//SYSIN DD *
DROP DATABASE DB1;
COMMIT;
CREATE DATABASE DB1 CCSID UNICODE;
CREATE TABLESPACE TS1 IN DB1;
CREATE TABLE T1 (C1 CHAR(7)) IN DB1.TS1;
DROP DATABASE DB2;
COMMIT;
CREATE DATABASE DB2 CCSID EBCDIC;
CREATE TABLESPACE TS2 IN DB2;
CREATE TABLE T2 (C1 CHAR(7)) IN DB2.TS2;
INSERT INTO T2 VALUES ('ABCDEFG');
INSERT INTO T1 (SELECT * FROM T2);
SELECT * FROM SYSADM.T1;
SELECT * FROM SYSADM.T2;
/*
//***************************************************
//STEP2 EXEC DSNUPROC,UID='SMPLUNLD',UTPROC='',SYSTEM='SSTR'
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
//SORTOUT DD UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
//SYSIN DD *
TEMPLATE REC DSN TEST123.STEP2.UNLOAD.SYSREC SPACE(15,5)
CYL UNIT(3390) VOLUMES(SCR03)
TEMPLATE CARD DSN TEST123.STEP2.UNLOAD.SYSPUNCH SPACE(15,5)
CYL UNIT(3390) VOLUMES(SCR03)
UNLOAD DATA FROM TABLE SYSADM.T2
(C1 CHAR(7))
UNLDDN REC PUNCHDDN CARD SHRLEVEL CHANGE
/*
/*
//**********************************************************************
//* DSNUPROC UTILITY STEP
//**********************************************************************
//STEP3 EXEC DSNUPROC,UID='LI848.LOAD1',TIME=1440,
// UTPROC='',
// SYSTEM='SSTR',DB2LEV=DB2A
//SYSUT1 DD DSN=TEST123.STEP3.LOAD.SYSUT1,DISP=(MOD,DELETE,CATLG),
// UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SORTOUT DD DSN=TEST123.STEP3.LOAD.SORTOUT,DISP=(MOD,DELETE,CATLG),
// UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SYSMAP DD DSN=TEST123.STEP3.LOAD.SYSMAP,DISP=(MOD,DELETE,CATLG),
// UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SYSIN DD *
TEMPLATE CWPH5APV
DSN('TEST123.STEP2.UNLOAD.SYSREC')
DISP(OLD,KEEP,KEEP)
LOAD DATA INDDN CWPH5APV LOG NO RESUME YES
EBCDIC CCSID(00037,00000,00000)
INTO TABLE
"SYSADM".
"T1"
WHEN(00001:00002) = X'0006'
NUMRECS 1
( "C1"
POSITION( 00004:00010) CHAR MIXED(007)
NULLIF(00003)=X'FF'
)
//********************************************************************
//STEP4 EXEC TSOBATCH,DB2LEV=DB2A
//SYSTSIN DD *
DSN SYSTEM(SSTR)
RUN PROGRAM DSNTEP2 PLAN(DSNTEPD1))
//SYSIN DD *
SELECT * FROM SYSADM.T1;
SELECT * FROM SYSADM.T2;
/*
動的 SQL SELECT ステートメントの出力を新規の Unicode 表にロードするには、クロスローダー機能を使用します。 SELECT ステートメントでは、表全体が選択されます。 次の例では、表 T1 が Unicode であり、表 T2 が EBCDIC であると想定されています。 この例では、カーソルを使用して T2 のすべてのデータを選択し、T1 にロードします。 このプロセスはクロスローダー機能 と呼ばれます。 データは、ロード時に Unicode に変換されます。//STEP5 EXEC DSNUPROC,UID='LOADIT',TIME=1440,COND=(EVEN),
// UTPROC='',
// SYSTEM='SSTR',DB2LEV=DB2A
//SYSUT1 DD DSN=TEST123.STEP5.LOAD.SYSUT1,DISP=(MOD,DELETE,CATLG),
// UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SORTOUT DD DSN=TEST123.STEP5.LOAD.SORTOUT,DISP=(MOD,DELETE,CATLG),
// UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SYSCOPY DD DSN=TEST123.STEP5.LOAD.COPY,DISP=(MOD,DELETE,CATLG),
// UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND)
//SYSIN DD *
EXEC SQL
DECLARE C1 CURSOR FOR SELECT C1 FROM SYSADM.T2
ENDEXEC
LOAD DATA REPLACE INCURSOR C1 INTO TABLE SYSADM.T1
//********************************************************************
//STEP1 EXEC TSOBATCH,DB2LEV=DB2A
//SYSTSIN DD *
DSN SYSTEM(SSTR)
RUN PROGRAM DSNTEP2 PLAN(DSNTEPD1)
//SYSIN DD *
SELECT * FROM SYSADM.T1;
SELECT * FROM SYSADM.T2;
/*