Serie ficheros virtuales

 

 


RPG Ficheros virtuales

 

 

 

Extensión de Base de Datos

 

 

        Estructura de soporte

 

        Relación de prototipos

 

          SRAGM_CPY

 

        SRAGM_DUP

 

        Ejemplo conjunto

 

 

                                                                                   ________

 

 

Estructura de soporte

 

 

A lo largo de este manual dedicado a los servicios de SRAGM, se irán ilustrando los procedimientos utilizando la estructura de datos DS8888c, que se compone de una subestructura de clave principal, una subestructura de clave alternativa y una subestructura de datos, que se detallan a continuación:

 

 

      **********************************************************************************************

      *  DS8888   *  Banco de pruebas de SRAGM

      **********************************************************************************************

 

      ***

      * *  Definición fichero virtual DS8888

      ***

     D DS8888c         DS                  QUALIFIED BASED(pDS8888c)            Soporte  DS8888

     D  DSK                                LIKEDS(DSCc)                         ClavesPF DS8888

     D  DSK01                              LIKEDS(DSC01c)                       ClavesLF DS8888

     D  DSD                                LIKEDS(DSDc)                         Datos    DS8888

 

      ***

      * *  Definición claves PF (Es la definición de una red [I,J], como en la emulación de una hoja de cálculo)

      ***

     D DSCc            DS                  QUALIFIED BASED(pDSCc)

     D  I                            10S 0                                      I

     D  J                            10S 0                                      J

 

      ***

      * *  Definición claves LF (Orden inverso)

      ***

     D DSC01c          DS                  QUALIFIED BASED(pDSC01c)

     D  JI                           10S 0                                      N*N - IJ + 1

 

      ***

      * *  Definición datos fichero virtual DS8888

      ***

     D DSDc            DS                  QUALIFIED BASED(pDSDc)

     D  IJ                           10S 0                                      N*(I-1) + J

     D  IMPT                         10S 0                                      [100000]+N*(I-1) + J

      * La constante [100000] se añadirá/retirará en los UPDATE de prueba

 

 

 

 

DS8888 es una definición tipo. Está basada en punteros nulos y para usarse debe instanciarse con una instrucción LIKEDS. Esto puede apreciarse en el juego entre el programa CC8888 y el programa de servicio SRAGMV.

 

 

                                                                                   ________

 

 

 

  Extensión de base de datos

 

  

 

      * Copia un fichero virtual a otro

 

     DSRAGM_CPY        PR            10I 0                                      NºRegistrosCopiados

     D P_pORIG                         *   VALUE OPTIONS(*STRING)               NombreFicheroOrg 1*I

     D P_pDEST                         *   VALUE OPTIONS(*STRING)               NombreFicheroDest2*I

     D P_Opci                         5I 0 VALUE OPTIONS(*NOPASS)               Opc 0=A 1=R 3=M  3*I

      * 0=COPY *ADD  1=COPY *REPLACE (Valor por defecto)  2=COPY *MERGE:ReemplazCoincidente AddResto

      *              ===================================

 

 

 

 

 

      * Duplica una base de datos virtual

 

     DSRAGM_DUP        Pr            10I 0                                      Nid Destino  0=Error

     D P_pORIG                         *   VALUE OPTIONS(*STRING)               NombreFicheroOrg  *I

     D P_pDEST                         *   VALUE OPTIONS(*STRING)               NombreFicheroDest *I

 

 

 

 

                                                                                   ________

 

 

 

  SRAGM_CPY. Prototipo

 

 

      * Copia un fichero virtual a otro

 

     DSRAGM_CPY        PR            10I 0                                      NºRegistrosCopiados

     D P_pORIG                         *   VALUE OPTIONS(*STRING)               NombreFicheroOrg 1*I

     D P_pDEST                         *   VALUE OPTIONS(*STRING)               NombreFicheroDest2*I

     D P_Opci                         5I 0 VALUE OPTIONS(*NOPASS)               Opc 0=A 1=R 3=M  3*I

      * 0=COPY *ADD  1=COPY *REPLACE (Valor por defecto)  2=COPY *MERGE:ReemplazCoincidente AddResto

      *              ===================================

 

 

 

 

 

Ejemplo

 

 

 

         T_Resu = SRAGM_CPY('DS8888':'DS8888CPY');

 

 

Al ejecutar esta instrucción, se copian los datos del fichero virtual 'DS8888' al fichero 'DS8888CPY', reemplazando el contenido anterior. T_Resu recoge el número de registros copiados.

 

Debe tenerse en cuenta que ambos ficheros deben compartir el mismo diseño y, si corresponde, tener colgando los mismos lógicos.

 

El fichero destino debe existir previamente, este procedimiento no lo crea. Sin embargo, el parámetro opcional permite afinar como debe actuar el copiado:

 

 

 0 = COPY *ADD

 

     Se efectúa una copia simple, los registros que ya existan en destino no se copian.

 

 

 1 = COPY *REPLACE (Valor por defecto)

 

     Antes de ejecutar la copia, se limpia el fichero de destino

 

 

 2 = COPY *MERGE Reemplaza coincidentes, añade resto.

 

     Es una copia elaborada. Los registros coincidentes se sustituyen, el resto se añade. Los registros preexistentes no coincidentes permanecen.

 

 

Al final del capítulo se presenta un extracto de un ejemplo conjunto de uso de SRAGM_CPY y SRAGM_DUP tomado del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

 

Funciones relacionadas

 

 

   SRAGM_INF   Recupera estadísticos de un fichero virtual. 

 

   SRAGM_DUP   Duplica una base de datos virtual.

 

   SRAGM_NEW   Crea un fichero virtual. Si existe previamente lo limpia.

 

   SRAGM_NOW   Tiene el mismo funcionamiento que SRAGM_NEW, pero no limpia datos previos si hay pre-existencia.

 

 

                                                                                   ________

 

 

 

  SRAGM_DUP. Prototipo

 

 

 

      * Duplica una base de datos virtual

 

     DSRAGM_DUP        Pr            10I 0                                      Nid Destino  0=Error

     D P_pORIG                         *   VALUE OPTIONS(*STRING)               NombreFicheroOrg  *I

     D P_pDEST                         *   VALUE OPTIONS(*STRING)               NombreFicheroDest *I

 

 

 

 

 

Ejemplo

 

 

La instrucción SRAGM_DUP duplica una base de datos origen en una nueva.

 

El destino no debe existir previamente. Si se precisa, utilice SRAGM_ERASE antes, como en el ejemplo que se presenta a continuación:

 

               ...

 

               // Elimina contenido anterior y duplica el nuevo

 

               T_Erro = SRAGM_ERASE('DS8888CPY');

 

               T_NID = SRAGM_DUP('DS8888':'DS8888CPY');

 

               if T_NID = *ZEROS;

                  return *ON;

               endif;

             

               ...

 

 

Aquí se elimina primero la base de datos virtual DS8888CPY

                                                 |_ DS8888CPY01

 

y a continuación se duplica DS8888      en   DS8888CPY

                            |_ DS888801      |_ DS8888CPY01

 

 

La instrucción supone que se proporcionan los nombres de los ficheros físicos base a duplicar, entonces explora dependencias y las duplica en destino, incluyendo datos. Si se indican nombres de lógicos, el proceso se rechaza.

 

El destino no debe existir previamente, en caso contrario, el procedimiento también rechaza el proceso.

 

 

 

Al final del capítulo se presenta un extracto de un ejemplo conjunto de uso de SRAGM_CPY y SRAGM_DUP tomado del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

 

 

 

 

Funciones relacionadas

 

   SRAGM_CPY   Copia los datos de un fichero virtual a otro.

 

   SRAGM_INF   Recupera estadísticos de un fichero virtual. 

 

   SRAGM_NEW   Crea un fichero virtual. Si existe previamente lo limpia.

 

   SRAGM_NOW   Tiene el mismo funcionamiento que SRAGM_NEW, pero no limpia datos previos si hay pre-existencia.

 

 

 

                                                                                   ________

 

Ejemplo conjunto

 

 

A continuación se presenta SRAGMV_Dup, la rutina del programa de servicio SRAGMV para pruebas de SRAGM, que se dedica a las pruebas concretas de SRAGM_DUP y SRAGM_CPY, en una versión extractada.

 

      

      *    PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP

      * PPPPPP                         PPPPPP

      * SRAGMV_Dup: Rutina para pruebas de SRAGM_DUP y SRAGM_CPY

      * PPPPPP                         PPPPPP

      *    PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP

      *

      * Duplica la BD virtual y lee destino por la vía lógica para evaluar

      *

     PSRAGMV_Dup       B                   EXPORT

      *

     DSRAGMV_DUP       Pi              N                                        0/1 Error         *O

     D P_FILE                        33    VALUE                                NombreFileActual  *I

     D P_LF                          33    VALUE                                NombreFileLFactual*I

     D P_NUME                         6  0 VALUE                                NºElementos prueba*I

     D P_Bloq                         6  0 VALUE                                NºEl.bloque DSPLY *I

     D P_OnErr                        1    VALUE                                0=Ite 1=Leav 2=Fin*I

     D P_DspSts                       1    VALUE                                0/1 emitir dspd   *I

 

      ***

      * * DEFINICION DE CAMPOS E INDICADORES

      ***

      *

      * Auxiliares para paso de nombres

     D T_FILE          S             33

     D T_LF            S             33

      *

      * SRAGM

     D T_Erro          S             10I 0

     D T_I             S              6  0

     D T_NCPY          S             10I 0

     D T_NID           S             10I 0

     D T_Resu          S             10I 0

 

      *

      * Instancia de DS8888c para soporte de DS8888 virtual

     DDS8888           DS                  LIKEDS(DS8888c) INZ

 

 

      /FREE

 

 

         // Construye nombres destino

 

         T_FILE = P_FILE;

         T_LF = P_LF;

 

         %subst(T_FILE:1:3) = 'DUP';

         %subst(T_LF  :1:3) = 'DUP';

 

 

 

 

         // Duplica

 

         T_NID = SRAGM_DUP(P_FILE:T_FILE);

 

 

 

 

         // Evalúa duplicación

 

         *IN90 = SRAGMV_Chain(T_LF:P_NUME:P_BLOQ:P_OnErr:P_DspSts);

 

         if *IN90;

            return *ON;

         endif;

 

 

 

 

         // Retira los primeros registros

 

         for T_I = 1 to 10;

 

            T_Erro = SRAGM_READ(T_FILE:T_I:%addr(DS8888));

            if T_Erro > *ZEROS;

               leave;

            endif;

 

            T_Resu = SRAGM_DELETE(T_FILE:%addr(DS8888));

 

         endfor;

 

 

 

 

         // Copia *MERGE

 

         T_NCPY = SRAGM_CPY(P_FILE:T_FILE:2);

 

 

 

 

         // Evalúa copia

 

         *IN90 = SRAGMV_Chain(T_LF:P_NUME:P_BLOQ:P_OnErr:P_DspSts);

 

         if *IN90;

            return *ON;

         endif;

 

 

 

 

         // Elimina duplicación

 

         T_Erro = SRAGM_ERASE(T_FILE);

 

         if T_Erro <> *ZEROS;

 

            return *ON;

 

         endif;

 

 

 

 

         // Fin de proceso satisfactorio

 

         return *OFF;

 

 

 

 

         // Control de errors

 

         Begsr *PSSR;

            SRAGG_AnotPSSR(P1STAT);

            return *On;

         Endsr;

 

 

      /END-FREE

 

 

     PSRAGMV_Dup       E

 

                                                                                   ________