创建表并迁移数据

时间:2016-05-16 14:49:32

标签: sql oracle ddl

我是数据库编程的新手并且有一个问题。

在正在运行的C ++应用程序中,有一个Oracle DB。其中一个表称为USR_INFO。它有多个列,如

 1. U_INFO_ID
 2. U_INFO_FIRST_NAME
 3. U_INFO_LAST_NAME
 4. U_INFO_ADDRESS
 5. U_INFO_AGE
 6. U_INFO_LAST_LOGIN_DATE
 7. U_INFO_LAST_LOGIN_TIME

现在我想创建一个名为USR_LOG_INFO的新表,并为其添加3列,称为

 1. U_INFO_ID
 2. U_INFO_LAST_LOGIN_DATE
 3. U_INFO_LAST_LOGIN_TIME

然后将USR_INFO中相同列的数据迁移到USR_LOG_INFO中的类似列。

基本上这里涉及两个步骤。

1.创建名为USR_LOG_INFO的新表

2.将列数据从USR_INFO迁移到USR_LOG_INFO

有人可以给我SQL命令做两步以上吗?

2 个答案:

答案 0 :(得分:0)

简单回答..不要..

alter table USR_INFO rename USR_LOG_INFO;
alter table USR_LOG_INFO add (U_INFO_ID                NUMBER,
                              U_INFO_LAST_LOGIN_DATE    DATE,
                              U_INFO_LAST_LOGIN_TIME    DATE);

进行。

如果你真的想按自己的方式去做。

create table USR_LOG_INFO as
   select * 
        , to_number(NULL) U_INFO_ID 
        , to_date(null)  U_INFO_LAST_LOGIN_DATE    
        , to_date(null) U_INFO_LAST_LOGIN_TIME
   from USR_INFO;

drop table USR_INFO;

最后 为什么你有单独的日期/时间列 您可能最好只使用TIMESTAMP列并在需要时提取日期和/或时间。

答案 1 :(得分:0)

另一个两步法:

create table USR_LOG_INFO
as
  select * 
  from USR_INFO;

然后按照用户Shoelace的建议,使用第二个alter table命令添加额外的列。

我避免了drop table步骤,因为从阅读OP的问题来看,OP是否希望保留或删除原始表格尚不清楚。