0

我正在使用 oracle 表。假设我有一个包含名称和日期时间戳的简单表:

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

我想添加第三列。让我们称之为日期。我想缩短时间。

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

您应该搜索有关如何为“更新前”创建触发器的文档。请注意,使用触发器并不总是最佳解决方案,因为它会影响性能。

编辑*:不可能使用“更新后”触发器按照 oracle 文档执行更新语句。(使用触发器)。但是,最好在代码中执行此操作,假设您有一个在此之上运行的应用程序。同样,您真的需要存储两次相同的信息吗?

于 2013-09-24T20:43:35.493 回答