sql oracle timestamp sql-update

sql - Actualizar la marca de tiempo de Oracle a la fecha actual



jstl core (2)

Tengo un campo TIMESTAMP (6) en Oracle db. El valor de este campo está en formato

DD/MM/YYYY HH:MM:SS.000000000 PM

¿Cómo actualizar este valor a la marca de tiempo actual?

[un enlace a una pregunta similar:] actualizar el valor de la fecha en el oráculo

Seguí este enlace, pero la consulta siguiente tarda mucho tiempo en ejecutarse.

update table_name set start_time = to_char(to_date(start_time, ''yyyy/mm/dd-hh:mi:ss:ff3''), ''2012/10/10-19:30:00:00'') where column=''Q''


Por qué no solo

update table_name set start_date = systimestamp where column=''Q''

Si sospecha que hay bloqueos en la mesa, hay algunas tablas para verificar: dba_locks , v$session , v$session_blockers etc. Son útiles cuando un usuario bloqueó algo con una update accidental sin un commit o rollback , pero debería estar capaz de ver si puede existir bloqueos de bloqueo desde la arquitectura de su aplicación. Deberías simplemente simular en papel todos los escenarios.


Una marca de tiempo es un punto en el tiempo, no tiene formato. Para actualizar dicho campo a la marca de tiempo actual, use SYSTIMESTAMP o CURRENT_TIMESTAMP (respectivamente la fecha / hora del servidor y la fecha / hora de la sesión):

UPDATE your_table SET your_column = systimestamp WHERE ...

Si la consulta toma una cantidad de tiempo anormal (mucho más larga que un SELECT comparable con la misma cláusula WHERE), las causas más probables son:

  1. Las filas que está actualizando están bloqueadas por otra sesión (haciendo un SELECCIONAR PARA ACTUALIZAR NOWAIT en estas filas se asegurará de que tenga el bloqueo).
  2. Tiene activadores que realizan trabajo adicional,
  3. Está actualizando una columna a la que hace referencia una clave externa no indexada.