2016-05-16 96 views
-1

我是數據庫編程的新手,並且有一個問題。創建表和遷移數據

在工作的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中的相似列。

基本上這裏涉及2個步驟。所謂USR_LOG_INFO

1,創建新表 從USR_INFO

2.Migrate列數據USR_LOG_INFO

有人可以給我的SQL命令做上述2步?

回答

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

Oracle DATE包含時間。你只需要TIMESTAMP,如果你想要一秒鐘的時間,就像做股票交易或非常時間敏感的事情。 – thatjeffsmith

+1

true ..你仍然只需要1列,而不是2.但我覺得,如果你正在做審計事件,那麼時間戳是完美的。我現在使用'時間戳與時區'列,只要它有意義,這是useuall,如果它有任何時間組件...和主要使用日期列沒有時間,即'日期= trunc(日期) – ShoeLace

0

另2步法:

create table USR_LOG_INFO 
as 
    select * 
    from USR_INFO; 

然後與2號alter table命令添加額外的列遵循用戶鞋帶的建議。

我避免了drop table這一步,因爲從閱讀OP的問題來看,不清楚OP是否希望原始表保留或刪除。