У меня есть таблица people
с менее чем 100 000 записей, и я сделал резервную копию этой таблицы, используя следующее:
create table people_backup as select * from people
Со временем я добавляю несколько новых записей в свою таблицу people
, но в конечном итоге я хочу объединить записи из моей резервной таблицы в people
. К сожалению, я не могу просто DROP
мою таблицу, так как мои новые записи будут потеряны!
Итак, я хочу обновить записи в моей таблице people
, используя записи из people_backup
на основе их первичного ключа id
, и я нашел 2 способа сделать это:
- ОБЪЕДИНИТЕ таблицы вместе
- используйте какое-то причудливое коррелированное обновление
Здорово! Однако оба этих метода используют SET
и заставляют меня указывать, какие столбцы я хочу обновить. К сожалению, я ленив, и структура people
может меняться со временем, и хотя мой оператор CTAS
не нуждается в обновлении, мой сценарий обновления/слияния потребует изменений, что кажется мне ненужной работой.
Есть ли способ объединить целые строки без указания столбцов? Я вижу здесь, что отсутствие указания столбцов во время INSERT
направит SQL к вставляйте значения по порядку, можно ли применить ту же методологию здесь, безопасно ли это?
NB: структура таблицы не изменится между резервными копиями.
select 'set tgt.'||column_name||' = src.'||colunn_name||',' from user_tab_columns where table_name = 'TABLE_NAME';
, который, по крайней мере, сможет сгенерировать для вас список столбцов, чтобы вы могли скопировать и вставить его в свою выписку. - person Boneist   schedule 04.11.2015delete
что-нибудь из таблицы, которая существует в резервной копии, а затем сделатьinsert
всего в резервной копии? Это медленно и не особенно элегантно, но соответствует вашим требованиям. - person Justin Cave   schedule 04.11.2015