Копирование содержимого таблицы A в таблицу B (еще на один столбец, чем таблица A) - PullRequest
0 голосов
/ 21 февраля 2012

В нашем приложении у нас есть два набора таблиц: один набор рабочих таблиц (с данными, которые в данный момент анализируются) и другой набор архивных таблиц (со всеми данными, которые даже были проанализированы, с тем же именем таблицы, но сa_ префикс).Структура таблиц одинакова, за исключением того, что в архивных таблицах есть дополнительный столбец run_id для различения различных наборов данных.

В настоящее время у нас есть сценарий SQL, который копирует содержимое с помощью операторов, аналогичныхна это:

insert into a_deals (run_id, deal_id, <more columns>) 
select maxrun, deal_id, <more columns> 
from deals,
  (select    max(run_id) maxrun from batch_runs);   

Это работает нормально, но всякий раз, когда мы добавляем новый столбец в таблицу, мы также должны mpdify сценария.Есть ли лучший способ сделать это стабильным, когда у нас есть новые столбцы?(Конечно, структуры должны совпадать, но мы бы хотели, чтобы у нас не было необходимости изменять сценарий.)

FWIW, мы используем Oracle в качестве нашей СУБД.

Ответы [ 2 ]

4 голосов
/ 21 февраля 2012

Следуя первому ответу, вы могли бы создать процедуру pl / sql, которая будет читать all_tab_columns для построения оператора вставки, а затем немедленно выполнять. Не слишком сложно, но будьте осторожны с тем, какие входные параметры вы разрешаете (имя_таблицы и т. П.) И кто может его запускать, поскольку это может предоставить отличную возможность для SQL-инъекции.

1 голос
/ 21 февраля 2012

Если две таблицы имеют те же столбцы в том же порядке (column_id from all_tab_columns), за исключением этого run_id впереди, то вы можете сделать что-то вроде:

insert into a_deals
select (select max(run_id) from maxrun), d.*
from deals
where ...;

Это ленивый подход, imo,и вы захотите убедиться, что столбцы находятся в одной и той же позиции для обеих таблиц как часть этого скрипта (проверьте all_tab_columns).Переключение двух полей varchar2 приведет к тому, что данные будут вставлены в неправильные поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...