2015-10-05 3 views
0

У меня проблема с миграцией данных в Oracle DB во время некоторых обновлений релиза.Перенос данных в Oracle DB с использованием SQL

Корпус:

  • Таблица X в версии 1 имеет три coulmns.
  • Та же таблица X в выпуске 2 имеет пять столбцов (два добавленных в релизе 2).
  • ту же таблицу в выпуске 3 имеет пять столбцов, как в версии 2.
  • Обновление путей включают в себя Выпуск 1 Выпуск 3 и Release 2 к выпуску 3.

Мне нужен запрос Oracle SQL, который копирует данные из таблицы TMP в фактическую таблицу в обоих случаях на основе размера coulmns из TMP, где я временно хранил данные (это должно быть сделано).

Ниже приведен запрос, который я пробовал, но он не работает.

insert into USER.X values 
(CASE (select count(*) from all_tab_columns where table_name='TMP') 
WHEN '3' THEN (select USER.TMP.*, null NEWCOL1 from USER.TMP, null NEWCOL2 from USER.TMP) 
WHEN '5' THEN (select USER.TMP.* from USER.TMP) 
END 
); 

Пожалуйста, помогите в этом, и если есть лучший способ сделать то же самое, пожалуйста, дайте мне знать.

+0

не работает? как правило, он помогает разместить точную ошибку. Это редкий случай, когда я могу сказать. вместо 'values ​​(a, b, c);' use 'select a, b, c from dual;' –

ответ

2

Редактировать: В вашей логике есть несколько проблем.

  1. Вы не можете определить количество параметров для вставки оператора во время выполнения. Вы должны определить его перед созданием инструкции insert.
  2. Корпус возвращает только 1 значение. Более того, и вы получите ошибку too many values

Таким образом, вы должны

  • Создать ХП
  • используется, если это еще и создание оператора вставки, основываясь на этого.
  • Выполнить его Execute immidiate

Пред. Ответ

Первая проблема в запросе, что select count(*) from all_tab_columns where table_name='TMP' возвращает целое число, в то время как в case вы сравниваете его '3' и '5' как VARCHAR. Поэтому, полагая, что остальная часть вашего запроса вернет результат правильно, попробуйте заменить '3' и '5' на 3 и 5

+0

@ Nick.McDermaid: я изменил запрос, как предложено 'INSERT INTO USER.Х ЗНАЧЕНИЯ ( СЛУЧАЙ (SELECT COUNT (*) FROM all_tab_columns WHERE table_name = 'ТМП' ) КОГДА 3 ТОГДА (SELECT USER.TMP. *, NULL, NEWCOL1, NULL, NEWCOL2 ОТ USER.TMP ) КОГДА 5 ТОГДА (SELECT * FROM USER.TMP USER.TMP .) END ); ' Но я получаю ошибку ниже: Ошибка в командной строке: 2 Колонка: 53 Сообщение об ошибке: SQL Error : ORA-00947: недостаточно значений 00947. 00000 - «Недостаточно значений» * Причина: * Действие: – user2363332

+0

Редактирование ответа, чтобы объяснить, что не так в вашем запросе. – Utsav

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