Oracle Sql:如何在insert select上设置默认列值

时间:2014-03-25 10:52:57

标签: sql oracle data-migration

在我的Oracle 11数据库中,我有一个用于将数据从一个表插入(迁移)到另一个表的sql脚本,这是我遇到的很多问题,例如

INSERT INTO TargetTable (eventname, eventplace, eventdate)
SELECT  name, eventplace, "How to insert time here?"   FROM SourceTable;

SourceTable没有eventdate列,而且它在TargetTable中是“Not Nullable”,所以我必须在那里插入一些内容,在这种情况下我只想使用当前时间对于所有行。我怎么能这样做?

p.s不仅对于日期,这也可能是一个缺少的varchar列,我可能会在目标数据库中设置一个默认值。

4 个答案:

答案 0 :(得分:2)

试试这个:

INSERT INTO TargetTable (
  eventname, 
 eventplace, 
  eventdate)
 SELECT name, 
        eventplace, 
        SysDate -- <- Current Date and Time
   FROM SourceTable;

答案 1 :(得分:1)

修改表定义,如下所示:

create table table_name
(
col1 varchar2(10),
default_date_col date default sysdate
);

这样你就不需要在插入中包含日期列,以防你不需要它。

答案 2 :(得分:1)

对于日期字段,只需使用sysdate,对于varchar字段,我认为你做得对,只需在选择后添加“默认值”。

答案 3 :(得分:1)

如果您想将日期格式用于varchar2列,请使用

 TO_CHAR(SYSDATE,'YYYY.MM.DD HH24:MI:SS');

您可以按照自己喜欢的方式玩

例如

TO_DATE(TO_CHAR(2013) || TO_CHAR(SYSDATE,'.MM.DD HH24:MI:SS'), 'YYYY.MM.DD HH24:MI:SS');