#oracle #plsql #ddl #alter
#Oracle #plsql #ddl #изменить
Вопрос:
Единственное, что я нашел, это переименование одного столбца за раз:
ALTER TABLE table_name
RENAME COLUMN old_name TO new_name;
Я прочитал документацию Oracle и не смог получить ответ для многих столбцов одновременно.
Ссылка: https://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqljrenamecolumnstatement.html
Комментарии:
1. Почему вы не можете просто выдать несколько операторов? Как вы выбираете, какие столбцы переименовывать и как их называть? (Вы ссылались на документы JavaDB; версия Oracle RDBMS находится здесь ; но вы все равно можете переименовать только один
alter
оператор.)2. Стандарт SQL (а вместе с ним Oracle DB и, возможно, большинство, если не все другие диалекты SQL) не определяет оператор ALTER TABLE, в котором вы можете изменить несколько имен столбцов за один выстрел. Итак, вам придется написать свой собственный код (или найти код, уже написанный кем-то другим), если вам нужно автоматизировать этот тип действий. ХОТЯ почему? Почему вам нужно переименовывать так много столбцов, что выполнение их по одному для вас невозможно?
Ответ №1:
Начиная с Oracle 18c, переименовать несколько столбцов таблицы одной командой невозможно.
Справочник по языку Oracle 18c SQL включает приведенную ниже диаграмму, иллюстрирующую, как RENAME_COLUMN_CLAUSE
ALTER TABLE
работает команда. К сожалению, почти каждое свойство столбца может быть изменено в группах, за исключением переименования.
Ответ №2:
Вы можете использовать user_tab_columns
представление словаря в качестве источника данных внутри курсора для оператора цикла
declare
v_table_name varchar2(40):='mytable';
begin
for c in ( select from user_tab_columns where table_name = upper(v_table_name) )
loop
execute immediate ('ALTER TABLE '||c.table_name||' RENAME COLUMN '||c.column_name
||' TO new_'||c.column_name);
end loop;
end;
Комментарии:
1. Я подозреваю, что «old_name» и «new_name» в сообщении OP были общими — он может захотеть переименовать «бейсбол» в «MLB» и «баскетбол» в «NBA», например (используя имена США). Предлагаемое вами решение может быть адаптировано для этого более общего понимания проблемы, но оно БУДЕТ более сложным.
2. @mathguy возможно, вы правы, но у нас недостаточно информации о стратегии переименования.