Tratamiento de modificaciones en tablas de base de datos

Objectives

After completing this lesson, you will be able to:
  • Describa el ajuste de las tablas de base de datos.
  • Ajuste las modificaciones directas en las tablas de base de datos.
  • Describa el proceso de conversión para las tablas de base de datos.
  • Ajuste las modificaciones indirectas en las tablas de base de datos.

Ajuste de tablas de base de datos

Si una modificación en el Dictionary ABAP afecta a una tabla de base de datos, directa o indirectamente, esta modificación debe aplicarse a la tabla de base de datos. Esto se denomina ajuste de la tabla de base de datos.

Existen tres enfoques diferentes para ajustar la tabla de base de datos:

ALTER TABLE

Con esta sentencia SQL, la herramienta de diccionario puede modificar (alterar) la disposición de la tabla en la base de datos. Los datos de la tabla se ajustan si es necesario. Sin embargo, no todas las modificaciones se pueden implementar mediante ALTER TABLE. En particular, las modificaciones que implican el riesgo de pérdidas de datos o errores de conversión no se implementan con ALTER TABLE.

Borrar y crear

Este es el enfoque más sencillo. El objeto de base de datos se borra y se crea de nuevo en función de la definición modificada. Por supuesto, esto solo es una buena idea si la tabla está vacía o si los datos almacenados en la tabla son redundantes.

Conversión de tabla

En este procedimiento, la tabla se crea primero en la base de datos con un nombre nuevo. A continuación, los datos se copian de la tabla antigua a la nueva, convirtiéndola si es necesario. Finalmente, la tabla antigua se borra y la nueva tabla se renombra para sustituir la tabla antigua.

Durante una conversión de tabla, es posible una pérdida parcial de datos, por ejemplo, cuando elimina un campo de tabla o reduce su longitud. Pueden producirse errores de tiempo de ejecución si modifica la clave primaria o el tipo de un campo de tabla existente.

Activación de modificaciones - Árbol de decisión

Reproduzca el vídeo para obtener más información sobre la activación de modificaciones.

Cómo realizar y analizar modificaciones directas

Reproduzca el vídeo para ver cómo realizar y analizar modificaciones directas en una tabla de base de datos.

Conversión de una tabla de base de datos

Cuando no es posible implementar sus modificaciones en la base de datos durante la activación, el editor muestra el mensaje de error "TABLE <...> was not activated".

Para ver más detalles, haga clic con el botón derecho en cualquier lugar del código fuente y seleccione Abrir con→log de diccionario.

La vista Log de Dictionary le indica que ALTER TABLE no es posible y muestra el mensaje de error Structure change at field level (convert table <...> ).

La conversión manual se realiza mediante una corrección rápida. En el editor, haga clic con el botón derecho en el nombre de la tabla y seleccione Corrección rápida. Como alternativa, sitúe el cursor en el nombre de la tabla y pulse Ctrl + 1. Hay dos correcciones rápidas para ajustar y activar una tabla de base de datos:

Ajustar y activar tabla de base de datos, convertir datos

Elija esta solución rápida si desea conservar y convertir sus datos. En la mayoría de las situaciones, esta será la opción correcta.

Ajustar y activar tabla de base de datos, borrar datos

Seleccione esta corrección rápida si los datos de la tabla ya no son necesarios.

Evite utilizar la corrección rápida Eliminar tabla en la base de datos. Esto elimina la tabla de la base de datos. A continuación, cualquier acceso a la tabla fallará hasta que active de nuevo la tabla de base de datos en el diccionario.

Nota

Tener un error de activación no es un requisito previo para utilizar estas correcciones rápidas. En principio, puede ajustar o borrar una tabla en la base de datos en cualquier momento siempre que tenga suficientes autorizaciones.

Cuando selecciona Ajustar una tabla de base de datos activa, convertir datos, la vista Ayuda rápida se abrirá automáticamente debajo de la ventana del editor. En la sección de la izquierda, puede desencadenar lo mismo u otra corrección rápida de nuevo. La sección de la derecha le permite analizar el último ajuste con más detalle. Aquí encontrará la hora de inicio del último ajuste y un enlace al log de ajuste de BD detallado.

El log de ajuste de BD contiene información detallada sobre cómo se ha ajustado la tabla. Resulta especialmente útil cuando algo sale mal durante el proceso de conversión.

Antes de analizar con un poco más de detalle lo que sucede exactamente durante una conversión de tabla, mire el siguiente vídeo para ver el ajuste de una tabla de base de datos.

Cómo convertir una tabla de base de datos

Reproduzca el vídeo para ver cómo convertir una tabla de base de datos.

El proceso de conversión (paso a paso)

Reproduzca el video para obtener información sobre el proceso de conversión.

Ajuste de modificaciones indirectas en tablas de base de datos

Anteriormente, hemos analizado cómo se debe ajustar la tabla de base de datos después de una modificación directa de la definición de tabla en el Dictionary ABAP. Ahora queremos echar un vistazo a los cambios indirectos.

Un ejemplo de una modificación indirecta de este tipo es una modificación del tipo básico de un dominio, que describe un campo de la tabla de base de datos. Otro ejemplo es la sustitución del dominio utilizado en un elemento de datos. Si la tabla incluye una estructura, una modificación de la estructura de include también afectará a la tabla de la base de datos.

Cuando activa un objeto de diccionario, la herramienta también ajusta todos los objetos dependientes. Sin embargo, si una tabla de base de datos se ve afectada, la herramienta detiene la activación con el mensaje de error Domain <...> cannot be activated due to dependent tables. Este error es independiente de la pregunta de si es posible ajustar directamente las tablas de base de datos afectadas o si se requiere una conversión manual.

En el ejemplo, el dominio ZS4D430_DEPARMENT_ID se utiliza indirectamente en la definición de tabla ZS4D430_EMPLOYEE. Después de un cambio de longitud de 20 a 40, la activación falla con el mensaje de error mostrado, aunque la extensión de longitud de un campo se puede ajustar utilizando ALTER TABLE.

El mensaje de error viene con una corrección rápida. Para invocar la solución rápida, haga clic con el botón derecho en el mensaje de error en la vista Problemas. Como alternativa, haga clic con el botón izquierdo en el mensaje de error y pulse Ctrl + 1. En la ventana de corrección rápida que se abre, seleccione Finalizar.

El resultado de la corrección rápida se muestra en la vista Ayuda rápida. La activación es correcta si ha sido posible ajustar todas las tablas dependientes utilizando ALTER TABLE o Borrar y crear.

La activación falla si al menos una de las tablas dependientes necesita un ajuste manual. Verifique el log de activación para identificar las tablas de base de datos afectadas y ajústelas manualmente como antes.

Consejo

Después de ajustar todas las tablas dependientes, vuelva al objeto de diccionario que ha modificado directamente y asegúrese de que tenga el estado Activo. En nuestro ejemplo, este es el dominio ZS4D430_DEPARTMENT_ID.

Cómo activar una modificación indirecta

Reproduzca el vídeo para ver cómo activar una modificación indirecta en una tabla de base de datos.

Gestionar modificaciones en una tabla de base de datos

Debe realizar modificaciones en la lista de campos de una tabla de base de datos que ya contiene datos. En función de la naturaleza de la modificación, el sistema le solicitará que ajuste la tabla.

Modelo:

  • /LRN/EMPLOY (Definición de tabla de base de datos)

Solución:

  • /LRN/EMPLOY_DEP (Definición de tabla de base de datos)
  • /LRN/DEPARTMENT_ID (elemento de datos)
  • /LRN/DEPARTMENT_ID (dominio)

Tarea 1: Copiar plantilla (opcional)

Copie la definición de la tabla de base de datos modelo. Si ha finalizado el ejercicio anterior, puede omitir esta tarea y continuar editando la tabla de base de datos Z##EMPLOY.

Pasos

  1. Copie la definición de tabla de base de datos /LRN/EMPLOY en su propio paquete (nombre sugerido: Z##EMPLOY, donde ## representa su número de grupo).

    1. En la vista Explorador de proyectos, haga clic con el botón derecho en la definición de la tabla de base de datos /LRN/EMPLOY para abrir el menú contextual.

    2. En el menú contextual, seleccione Duplicar ....

    3. Introduzca el nombre del paquete en el campo Paquete. En el campo Nombre, introduzca el nombre Z##EMPLOY, donde ## representa su número de grupo.

    4. Confirme la orden de transporte y seleccione Finalizar.

  2. Active la copia.

    1. Pulse Ctrl + F3 para activar la definición de la tabla de base de datos.

Tarea 2: Gestionar modificaciones directas

En la lista de campos de su tabla de base de datos, añada un nuevo campo (nombre sugerido: DEPARTMENT_ID) y escríbalo con el tipo incorporado CHAR y la longitud 40. Después de activar la tabla con el nuevo campo, reduzca la longitud del campo a 20 y ajuste la tabla en la base de datos.

Pasos

  1. Antes del campo ANNUAL_SALARY, agregue un nuevo campo (nombre sugerido: DEPARTMENT_ID) y escríbalo con el tipo CHAR incorporado y la longitud 40.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      12345678
      birth_date : z##birth_date; entry_date : z##entry_date; department_id : abap.char(40); @Semantics.amount.currencyCode : 'z##employ.currency_code' annual_salary : z##annual_salary; currency_code : waers;
  2. Active la definición de la tabla de base de datos.

    1. Pulse Ctrl + F3 para activar el objeto de desarrollo.

  3. Visualice el log de Dictionary para la tabla.

    1. Haga clic con el botón derecho en cualquier lugar del código fuente y seleccione Abrir con→log de diccionario.

    2. Vaya a la ficha Registro de diccionario que aparece debajo del editor.

    3. Mantenga pulsada la tecla Ctrl y haga clic en la fila que empieza por Ver log.

    4. En la barra de herramientas de la pestaña Log de diccionario, seleccione Mostrar barra de herramientas de búsqueda.

    5. Introduzca el nombre de su tabla de base de datos en el campo Buscar: y pulse Intro.

    6. La estrategia de actualización se menciona después de la fila Ajustar tabla en BD >>>.

  4. Reduzca la longitud del campo nuevo de 40 a 20.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      12345678
      birth_date : z##birth_date; entry_date : z##entry_date; department_id : abap.char(20); @Semantics.amount.currencyCode : 'z##employ.currency_code' annual_salary : z##annual_salary; currency_code : waers;
  5. Active la definición de la tabla de base de datos.

    1. Pulse Ctrl + F3 para activar el objeto de desarrollo.

  6. Analice el log ABAP.

    1. En la ventana de diálogo con el mensaje de error, seleccione Abrir log ABAP para visualizar el log de Dictionary.

    2. En la pestaña Log de diccionario, mantenga pulsada la tecla Ctrl y haga clic en la fila que empieza por Ver log.

    3. En la barra de herramientas de la pestaña Log de diccionario, seleccione Mostrar barra de herramientas de búsqueda.

    4. Introduzca el nombre de su tabla de base de datos en el campo Buscar: y pulse Intro.

    5. La estrategia de actualización se menciona después de la fila Ajustar tabla en BD >>>.

  7. Utilice la corrección rápida para convertir el contenido de su tabla de base de datos.

    1. Navegue al código fuente de su definición de tabla de base de datos.

    2. En la fila de código que comienza con define table, sitúe el cursor en el nombre de la tabla y pulse Ctrl + 1 para invocar la corrección rápida.

    3. En la lista de correcciones rápidas disponibles, seleccione Ajustar y activar tabla de base de datos, convertir datos.

Tarea 3: Gestionar modificaciones indirectas

Sustituya el tipo de codificación fija por un nuevo elemento de datos (nombre sugerido: Z##_DEPARTMENT_ID, donde ## es su número de grupo) que utiliza un nuevo dominio ((nombre sugerido: Z##_DEPARTMENT_ID). En el dominio, utilice el tipo técnico CHAR con una longitud de 20. Después de activar la tabla de base de datos, modifique la longitud del dominio a 10. A continuación, active y ajuste la tabla de base de datos.

Pasos

  1. En su definición de tabla de base de datos, sustituya abap.char(20) por Z##_DEPARTMENT_ID y utilice una corrección rápida para crear el nuevo elemento de datos.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      12345678
      birth_date : z##_birth_date; entry_date : z##_entry_date; department_id : z##_department_id; @Semantics.amount.currencyCode : 'z##employ_dep.currency_code' annual_salary : z##_annual_salary; currency_code : waers;
    2. Haga clic en z##_department_id y pulse Ctrl + 1 para abrir el menú de solución rápida.

    3. Desde el menú de corrección rápida, haga doble clic en Crear elemento de datos ....

    4. Confirme el paquete y el nombre, introduzca una descripción, por ejemplo, Identificación de departamento, y seleccione Siguiente.

    5. Asigne el nuevo objeto a una orden de transporte y seleccione Finalizar.

    6. En Nombre de tipo, introduzca Z##_DEPARTMENT_ID e introduzca las siguientes etiquetas de campo:

      CampoValor
      BreveSal.
      Mediofinanciero
      LargoID de departamento
      CabeceraID de departamento
  2. Grabe el elemento de datos. A continuación, utilice la navegación hacia delante para crear el dominio con el tipo técnico CHAR y una longitud de 20.

    1. Pulse Ctrl + S para grabar el elemento de datos.

    2. Seleccione la etiqueta Nombre de tipo: para empezar a crear el dominio.

    3. Confirme el paquete y el nombre, introduzca una descripción, por ejemplo, Identificación de departamento, y seleccione Siguiente.

    4. Asigne el nuevo objeto a una orden de transporte y seleccione Finalizar.

    5. Introduzca CHAR como tipo de datos y 20 como longitud.

  3. Guarde el dominio. A continuación, active el dominio, el elemento de datos y la definición de la tabla de base de datos.

    1. Pulse Ctrl + S para guardar el dominio.

    2. Seleccione Activar objetos de desarrollo ABAP inactivos. Como alternativa, pulse Ctrl + Mayús + F3.

    3. Seleccione Seleccionar todo y, a continuación, Activar.

  4. En su dominio para el ID de departamento, reduzca la longitud técnica y la longitud de visualización de 20 a 10.

    1. Navegue a su dominio Z##_DEPARTMENT_ID.

    2. Modifique el valor en el campo Longitud de 20 a 10.

    3. Elimine el valor en el campo Longitud de salida (se rellenará automáticamente durante la activación).

  5. Intente activar el dominio y analice los mensajes en la vista Problemas.

    1. Pulse Ctrl + F3 para activar el dominio.

    2. Abra la vista Problemas debajo del editor para visualizar los mensajes de error.

  6. Utilice la corrección rápida para el mensaje de error Dominio ... no se puede activar debido a tablas dependientes.

    1. En la vista Problemas, sitúe el cursor en el mensaje de error que comienza con Dominio ... y pulse Ctrl + 1 para invocar la solución rápida.

    2. Seleccione Finalizar.

    3. En la sección Resultado anterior de la parte inferior derecha, seleccione Log de activación para analizar el log de activación.

  7. Utilice una corrección rápida para ajustar y convertir la tabla de base de datos dependiente, es decir, su tabla de base de datos Z##EMPLOY.

    1. Navegue al código fuente de su definición de tabla de base de datos.

    2. En la fila de código que comienza con define table, sitúe el cursor en el nombre de la tabla y pulse Ctrl + 1 para invocar la corrección rápida.

    3. En la lista de correcciones rápidas disponibles, seleccione Ajustar y activar tabla de base de datos, convertir datos.

  8. Active el dominio para el ID de departamento.

    1. Navegue a la definición de su dominio para el ID de departamento.

    2. Pulse Ctrl + F3 para activar el objeto de desarrollo.