Select Single For Update

La sentencia SELECT SINGLE FOR UPDATE se utiliza para leer un registro de base de datos y para establecer un objeto de bloqueo para el registro leído para impedir a otras ejecuciones a que realice cambios sobre el registro. Esta lección trata de explicarle cómo implementar correctamente esta instrucción.

  • Sintaxis

SELECT SINGLE FOR UPDATE result
FROM source
INTO target
WHERE sql_cond]

  • Efecto

El bloqueo se realiza en base de datos sólo si en los filtros se especifican todas las columnas que forman la clave.

  • Comportamiento de las variables de sistema
  • SY-SUBRC:
  • 0 La sentencia SELECT establece SY-SUBRC en 0 para cada valor pasado a un objeto de datos ABAP. La sentencia SELECT también establece SY-SUBRC en 0 antes de que salga de un bucle SELECT con ENDSELECT si se pasó al menos una fila.
  • 4 La instrucción SELECT establece SY-SUBRC en 4 si el conjunto de resultados está vacío, es decir, si no se encontraron datos en la base de datos. Se aplican reglas especiales cuando sólo se utilizan expresiones agregadas en el resultado.
  • 8 La instrucción SELECT establece SY-SUBRC en 8 si se utiliza la adición FOR UPDATE en resultado y la clave primaria no se especifica completamente después del WHERE.
  • Aplicación práctica

En un programa ejecutable realizamos una lectura en la tabla de base de datos ZSPFLISA00001 utilizando la sentencia SELECT SINGLE FOR UPDATE para obtener el registro con el CARRID = SQ y CONNID = 2 y actualizamos el campo FLTYPE con el valor X para el registro obtenido.

  1. Implementamos el código fuente.
  2. Ejecutamos el programa.01 49
  • Conclusión

Durante la ejecución del programa ningún otro programa puede modificar en base de datos a través de las sentencias UPDATE, MODIFY o DELETE el registro obtenido. Esto se puede probar ejecutando este programa con la sentencia WAIT UP TO n SECONDS después del SELECT e intentando desde otro programa realizar una modificación en base de datos para el mismo registro.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *