2016-05-20 5 views
1

Я работаю над базой данных Oracle. Он имеет таблицу USR_INFO и имеет следующие столбцы.Перенос данных в Oracle

  1. U_ID
  2. U_NAME
  3. U_ROLE

U_ROLE может быть значением "A", "B" или "C".

Теперь я хочу, чтобы создать новую таблицу с именем ROLE_INFO, имеющие следующие столбцы

  1. ROLE_ID
  2. ROLE_NAME
  3. ROLE_TAG

Задача состоит в том, чтобы запросить в USR_INFO и искать U_ROLE = = "B", а затем, если он соответствует , тогда скопируйте U_ID в ROLE_ID и U_NAME в ROLE_NAME. Я хочу сделать это для всех строк в USR_INFO. При этом я также хочу вставить «BB» в ROLE_TAG.

После завершения копирования всех данных в ROLE_INFO. Я хочу найти U_ROLE == "B" в USR_INFO и удалить все эти строки, не затрагивая других.

Это то, что я сделал до сих пор.

Создать новую таблицу под названием ROLE_INFO

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

Теперь для копирования, я сделал это,

INSERT INTO ROLE_INFO (ROLE_ID, ROLE_NAME) 

SELECT U_ID, U_NAME 

FROM USR_INFO 

WHERE U_ROLE == "B" 

// Когда я делать вставки, как убедиться в том, что ROLE_TAG получает заполняется "BB"?

Для удаления

DELETE FROM USR_INFO 

WHERE U_ROLE == "B"; 

// Будет ли это просто удалить строку, которая уже скопированное ROLE_INFO? Или он удалит больше?

+0

Технически этот вопрос не связан с миграцией, возможно, реструктуризацией. Миграция обычно подразумевает перемещение данных из БД в БД, в большинстве случаев другой тип БД (т.е.e Oracle на SQL-сервер и т. д.). Кроме этого - хорошо структурированный вопрос, престиж. –

ответ

1

Вы можете изменить вставку таким образом, чтобы добавить «BB» в вашей вставки заявления (обратите внимание на одного = вместо ==). Также замените "B" на 'B' в вашем предложении where.

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; 

Поскольку ваш оператор выбора и удаление оператор проверка того же состояние удаления заявления будут удалить только строки, где U_ROLE = «B» (обратите внимание, что вам нужно использовать одинарные равные, а).

Также, как только вы выполняете инструкцию insert, вам нужно выдать инструкцию фиксации, чтобы изменения сохранялись и были видимыми.

Смежные вопросы