Daniel,  una pregunta más, que efecto puede pasar al realizar OPNDBF desde
un RPGIV, en el rpg lo realizaríamos con un QCMDEXC, lo mismo que el CPYF,
en el CL no utilizaríamos QCMDEXC, sino que los dos comandos estarían dentro
de un mismo llamado que sería el CL.

Gracias
Jaime Villa T.

----- Mensaje original ----- 
De: "Daniel Garcia" <[EMAIL PROTECTED]>
Para: <[email protected]>
Enviado: Sábado, 27 de Agosto de 2005 02:54 a.m.
Asunto: Re: Cpyf


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


__________________________________________________
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