2016-05-16 15 views
-1

私はデータベースプログラミングの初心者ですが、質問があります。テーブルの作成とデータの移行

動作しているC++アプリケーションには、Oracle DBがあります。テーブルの1つは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するUSR_LOG_INFO

USR_INFOから

2.Migrate列データと呼ば

1.Create新しいテーブルが誰かは、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の日付には時間が含まれています。株式取引や非常に時間の敏感なことのために、ほんの少しの時間が必要な場合は、TIMESTAMPが必要です。 – thatjeffsmith

+1

true ..あなたはまだ2列ではなく1列しか必要としませんが、監査イベントを行っている場合、タイムスタンプはそれにぴったりです。私は今、 'timestamp with timezone'カラムを使用します。これは、時間成分を持っていればuseuallです。主にdateカラムを使用しません。つまり、' date = trunc(date) ' – ShoeLace

0

別の2段階のアプローチ:

create table USR_LOG_INFO 
as 
    select * 
    from USR_INFO; 

その後、第二alter tableコマンドで余分な列を追加することで、ユーザの靴ひものアドバイスに従ってください。

OPの質問を読んでから、OPが元のテーブルを残しておきたい、または削除したかったかどうかは不明だったので、私はdrop tableのステップを避けました。

関連する問題