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:
- 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).
- Tiene activadores que realizan trabajo adicional,
- Está actualizando una columna a la que hace referencia una clave externa no indexada.