2016-05-20 8 views
1

私はOracleデータベースで作業しています。 USR_INFOという表があり、次の列があります。Oracleでのデータ移行

  1. U_ID
  2. U_NAME
  3. U_ROLE

U_ROLEは、 "A"、 "B" または "C" の値とすることができます。

今私は= ROLE_INFOタスクがUSR_INFOに照会しU_ROLEを探すことである以下の列

  1. ROLE_ID
  2. ROLE_NAME
  3. ROLE_TAG

を持つと呼ばれる新しいテーブルを作成したいです= "B"を入力し、 と一致する場合は、U_IDをROLE_IDに、U_NAMEをROLE_NAMEにコピーします。私はUSR_INFOのすべての行についてこれをしたいです。 それをしながら、私はまた、ROLE_TAGに "BB"を挿入したいと思っています。

すべてのデータをROLE_INFOにコピーすると完了です。 USR_INFOでU_ROLE == "B" を検索し、他の行に影響を与えずにこれらの行をすべて削除します。

これは私がこれまで行ったことです。

私は挿入を行うとは、どのようにROLE_TAGが移入されることを確認するために、//、私はこれをしなかった、

INSERT INTO ROLE_INFO (ROLE_ID, ROLE_NAME) 

SELECT U_ID, U_NAME 

FROM USR_INFO 

WHERE U_ROLE == "B" 

CREATE TABLE ROLE_INFO 
(
    ROLE_ID INT, 
    ROLE_NAME VARCHAR(255), 
    ROLE_TAG VARCHAR(10) 
); 

今コピーのためのROLE_INFO

と呼ばれる新しいテーブルを作成します。 「BB」?

DELETE FROM USR_INFO 

WHERE U_ROLE == "B"; 

// を削除するための

が、これは単に、すでにROLE_INFOにコピーされていた行を削除しますか?それとももっと削除されますか?

+0

技術的には、この問題には移行、おそらく再編が含まれていません。移行は、通常、データをDBからDBに移動することを意味し、ほとんどの場合、異なるDBタイプ(すなわち、e OracleからSQLサーバーなど)。それ以外にも、うまく構造化された質問、名声。 –

答えて

1

あなたは(代わりに==の単一=に注意してください)この方法は、あなたのINSERT文に「BB」を追加するのインサートを変更することができます。また、where句で"B"'B'に置き換えてください。

INSERT INTO ROLE_INFO (ROLE_ID, ROLE_NAME , ROLE_TAG) 
SELECT U_ID, U_NAME,'BB' 
FROM USR_INFO 
WHERE U_ROLE='B'; 

COMMIT; 

DELETE FROM USR_INFO 
WHERE U_ROLE='B'; 

COMMIT; 

SELECT文とDELETE文のみU_ROLE =「B」は(あなたにも、単一の等号を使用する必要がありますのでご注意ください)行を削除するのと同じ条件のためのDELETE文をチェックしているので。

また、insert文を実行した後は、コミット文を発行して、変更を永続的に表示する必要があります。