8

Oracle db に 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'
4

2 に答える 2

21

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

UPDATE your_table 
   SET your_column = systimestamp
 WHERE ...

クエリに異常な時間がかかる場合 (同じ WHERE 句を使用した同等の SELECT よりもはるかに長い)、主に次の原因が考えられます。

  1. 更新中の行は別のセッションによってロックされています (これらの行に対して SELECT FOR UPDATE NOWAIT を実行すると、確実にロックされます)。
  2. 追加の作業を実行するトリガーがあり、
  3. インデックスのない外部キーによって参照される列を更新しています。
于 2012-10-10T11:33:48.310 に答える
3

なぜあなただ​​けではないのですか?

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

テーブルにロックがあると思われる場合はdba_locks、チェックするテーブルがいくつかv$sessionありますv$session_blockers。アプリケーションのアーキテクチャ。すべてのシナリオを紙の上でシミュレートするだけです。updatecommitrollback

于 2012-10-10T11:34:41.290 に答える