web-dev-qa-db-ja.com

Oracleタイムスタンプを現在の日付に更新します

OracleデータベースにTIMESTAMP(6)フィールドがあります。このフィールドの値は次の形式です

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

この値を現在のタイムスタンプに更新するにはどうすればよいですか?

[同様の質問へのリンク:] Oracleの日付値の更新

このリンクをたどりましたが、次のクエリの実行には非常に長い時間がかかります。

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'
6
r.s

timestamp は特定の時点であり、形式はありません。このようなフィールドを現在のタイムスタンプに更新するには、 SYSTIMESTAMP または CURRENT_TIMESTAMP (それぞれサーバーの日付/時刻とセッションの日付/時刻):

UPDATE your_table 
   SET your_column = systimestamp
 WHERE ...

クエリに異常な時間がかかる場合(同じWHERE句を持つ同等のSELECTよりもはるかに長い)、最も可能性の高い原因は次のとおりです。

  1. 更新している行は別のセッションによってロックされています(これらの行でSELECT FOR UPDATE NOWAITを実行すると、youがロックされていることが確認されます)。
  2. 追加の作業を実行するトリガーがあります。
  3. インデックス付けされていない外部キーによって参照されている列を更新しています。
17
Vincent Malgrat

なぜあなたは

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

テーブルにロックがあると思われる場合は、チェックするテーブルがいくつかあります。dba_locksv$sessionv$session_blockersなど。これらは、ユーザーがupdateまたはcommitなしで偶発的なrollbackで何かをブロックした場合に役立ちますが、ブロックロックが存在するかどうかを確認できるはずです。アプリケーションのアーキテクチャ。すべてのシナリオを紙でシミュレートする必要があります。

3
Florin Ghita