Hola Jaime,

Prueba a hacer la copia como te indique antes, con CPYF FROMFILE(*LIBL/ORIGEN) TOFILE(*LIBL/DESTINO) FROMRCD(1) en vez de CPYF FROMFILE(*LIBL/ORIGEN) TOFILE(*LIBL/DESTINO) FROMRCD(*START)

Ademas copia todo el fichero de origen a destino de una vez, ahorraras algo de tiempo y de consumo de CPU. Depende de la maquina que tengas necesitaras 1 millon de registros para apreciar una diferencia, pero te aseguro que en maquinas lentas simplemente copiando 100.000 registros hay diferencias de unos pocos segundos.

Si aun asi te interesa por algun motivo copiar en bloques hazlo de la siguiente forma.

El CL debe estar sometido por BATCH y debe saber recuperar los nombres de los ficheros a copiar.

Haces un OPNDBF FILE(*LIBL/ORIGEN) OPTION(*INP) SEQONLY(*NO 20) con esto abres el fichero de origen de solo lectura y en cada acceso al disco traeras a memoria 20 registros y para el de destino OPNDBF FILE(*LIBL/DESTINO) OPTION(*OUT) SEQONLY(*NO 20)

Ahora cuando hagas la copia ya tendras siempre el fichero abierto y evitaras que DB2 tenga que abrir y cerrar cada vez el fichero, ya que esto suele consumir bastante tiempo.


Per sigo pensando que lo mas optimo seria hacer

PGM
   OPNDBF FILE(*LIBL/ORIGEN) OPTION(*INP) ACCPTH(*ARRIVAL) SEQONLY(*YES 20)
   OPNDBF FILE(*LIBL/DESTINO) OPTION(*OUT) SEQONLY(*NO 20)
   CPYF FROMFILE(*LIBL/ORIGEN) TOFILE(*LIBL/DESTINO) FROMRCD(1)
   CLOF OPNID(ORIGEN)
   CLOF OPNID(DESTINO)
ENDPGM

Dependiendo de tu maquina puedes hacer que recupere mas o menos registros en cada acceso al disco, pero no te recomendaria pusieras un valor por encima de 100.


Saludos
Dani

Isencia S.L.
Daniel García
E-mail: [EMAIL PROTECTED]
Tel. +34 93 754 03 66
Fax +34 93 754 03 98

Jaime Villa Torres escribió:

Gracias Jesús, ya realice esa prueba, pero los tiempos de respuesta con el
insert, son n veces mayor que realizar el cpyf en un solo trabajo.
Gracias por tu tiempo.

Jaime Villa T.
----- Mensaje original ----- De: "Jesus Olague" <[EMAIL PROTECTED]>
Para: <[email protected]>
Enviado: Viernes, 26 de Agosto de 2005 06:05 p.m.
Asunto: Re: Cpyf


A grosso modo:

1. Obtienes de un archivo los nombres de los archivos a y b
2. Concatenas en una variable la sentencia SQL para que quede mas o menos
    STRING = 'INSERT INTO b SELECT a WHERE  blablabla'
3. Preparas la sentencia
    C/EXEC SQL
    C+ PREPARE SENT FROM :STRING
    C/END-EXEC
4. Ejecutas la sentencia
    C/EXEC SQL
    C+ EXECUTE SENT
    C/END-EXEC

Y ya está.

Saludos.


__________________________________________________
Forum.HELP400 es un servicio más de NEWS/400.
© Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://coyote.combios.es/mailman/listinfo/forum.help400

Responder a