Utilice el programa de utilidad UNLOAD para descargar los datos tal cual en un conjunto de datos EBCDIC o ASCII. A continuación, utilice LOAD para cargar los datos en la nueva tabla Unicode. Especifique la palabra clave de esquema de codificación apropiada (ASCII, EBCDIC o CCSID) en la sentencia LOAD.Recomendación : Utilice la opción PUNCHDDN de la utilidad UNLOAD para generar las sentencias de la utilidad LOAD correspondientes a los datos a medida que se descargan en un Db2 .
El JCL de ejemplo siguiente realiza las acciones siguientes:
- En STEP1 se crean y se llenan dos tablas. T1 es una tabla Unicode. T2 es una tabla EBCDIC.
- En STEP2 se descargan los datos de la tabla EBCDIC T2. La sentencia UNLOAD contiene la opción PUNCHDDN. Esta opción genera (en el conjunto de datos SYSPUNCH) sentencias LOAD correspondientes para cargar los datos nuevamente en la tabla original, T2. Para utilizar este archivo SYSPUNCH para cargar los datos descargados en la tabla T1, debe modificar el SYSPUNCH o el JCL.
- En STEP3 se cargan los datos descargados en STEP2 en la tabla Unicode T1. Dado que el catálogo define la tabla como Unicode, los datos se convierten a Unicode cuando se cargan.
- En STEP4 se proporcionan como salida los datos actuales a ambas tablas.
//STEP1 EXEC TSOBATCH
//SYSTSIN DD *
DSN S(SSTR) R(1) T(1)
RUN PROGRAM DSNTEP2 PLAN(DSNTEPC1)
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(DSNTEPC1))
//SYSIN DD *
SELECT * FROM SYSADM.T1;
SELECT * FROM SYSADM.T2;
/*
Utilice la función de carga cruzada para cargar la salida de una sentencia SELECT de SQL dinámico en la nueva tabla Unicode. La sentencia SELECT selecciona toda la tabla. En el ejemplo siguiente, supongamos que la tabla T1 es Unicode y que la tabla T2 es EBCDIC. Este ejemplo utiliza un cursor para seleccionar todos los datos de T2 para luego cargarlos en T1. Este proceso recibe el nombre de función de carga cruzada. Los datos se convierten a Unicode cuando se cargan.//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(DSNTEPC1)
//SYSIN DD *
SELECT * FROM SYSADM.T1;
SELECT * FROM SYSADM.T2;
/*