Как отбросить много столбцов в таблице в oracle, когда столбцы очень большие? - PullRequest
0 голосов
/ 28 января 2020

У меня есть таблица, и таблица состоит из 70 столбцов. Я хочу отбросить около 68 столбцов, и мне просто нужно 2 столбца в моей таблице. Итак, все, что я пробовал, приведено ниже:

Alter table_name drop column where column
_name not in (col1, col2);

Я обнаружил, что этот шаг занимает много времени. Есть ли другой лучший вариант, где я могу удалить 68 столбцов, не занимая много времени?

Ответы [ 2 ]

3 голосов
/ 28 января 2020

Создать новую таблицу с помощью SELECT: CREATE new_table AS SELECT col1, col2 FROM old_table

Удалить старую таблицу (используйте параметр очистки, если вы не хотите, чтобы он был в корзине)

Переименуйте новую таблицу в старое имя таблицы: RENAME new_table TO old_table

Вам также нужно будет добавить любые индексы, триггеры, ограничения или разрешения, которые были у вас в старой таблице, если вы хотите их на новом столе.

1 голос
/ 28 января 2020

Напишите скрипт для генерации DDL для сохранения набора текста.

CREATE TABLE test_drop ( a number, b number, c number, d number, e number);

select 'alter table ' || owner || '.' || table_Name || ' drop column ' || listagg(column_name,',') within group ( order by column_name) || ';' drop_ddl
from dba_tab_columns 
where owner = user
and table_Name = 'TEST_DROP'
and column_Name not in ('A','B')
group by owner, table_name;
+-----------------------------------------------+
|                 DROP_DDL                      |
+-----------------------------------------------+
| alter table APPS.TEST_DROP drop column C,D,E; |
+-----------------------------------------------+

Затем скопируйте вывод и получите DDL. Воссоздание стола - это ненужная боль.

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