0

オラクルテーブルを使用しています。名前と日付タイムスタンプを持つ単純なテーブルがあるとしましょう。

Name  Time
---   ---
joe   01JAN1970:00:00:01
jane  04MAR2010:20:55:11
julie 22DEC1984:11:11:11

3 番目の列を追加します。それをデートと呼びましょう。時間を切り詰めたい。

Name  Time               Date
---   ---                ---
joe   01JAN1970:00:00:01 01JAN1970
jane  04MAR2010:20:55:11 04MAR2010
julie 22DEC1984:11:11:11 22DEC1984

これは、アップデートで簡単に達成できます。トリックは、誰かがジュリーの時間を更新した場合、彼女の日付も自動的に更新することです:

Name   Time               Date
---    ---                ---
joe    01JAN1970:00:00:01 01JAN1970
jane   04MAR2010:20:55:11 04MAR2010
julie  02OCT1999:22:22:22 02OCT1999

Oracle 11G でこれを実現する簡単な方法はありますか? 特定の列が変更されたときに、行内の別の列を更新するトリガーを設定できますか?

編集:例の明確さ

4

2 に答える 2

0

私は、あなたが望むものを返すビューを使用するという Jesse のアドバイスを支持します。

ただし、これを本当に保存したい場合 (たとえば、インデックスを作成するため)、仮想列を使用できます。

create table foo
(
  name varchar(50) not null,
  time timestamp not null,
  plain_date generated always as (to_char(time, 'yyyy-mm-dd'))
);

代替手段として使用することもできますtrunc(time)が、それでも時間の部分が含まれます - にのみ設定され00:00:00ます。を使用to_char()すると、常に目的の形式で日付を取得できます。

ここに小さな SQLFiddle があります: http://sqlfiddle.com/#!4/a7f55/2

于 2013-09-24T20:43:13.000 に答える
0

「更新前」のトリガーを作成する方法に関するドキュメントを検索する必要があります。ただし、トリガーを使用するとパフォーマンスが低下する可能性があるため、常に最適なソリューションであるとは限らないことに注意してください。

EDIT*: 「AFTER UPDATE」トリガーを使用して、オラクルのドキュメントに従って更新ステートメントを実行することはできません。(トリガーの使用)。ただし、この上でアプリケーションを実行していると仮定すると、コードでこれを行うのが最善です。繰り返しますが、本当に同じ情報を 2 回保存する必要がありますか?

于 2013-09-24T20:43:35.493 に答える