Добавление столбца в oracle
@0xdb, да я сам был таким лет 10-15 назад. 🙂 Позже когда повозился с dbms_redefinition на больших таблицах исключительно по причине приступа нездорового перфектионизма понял что оно того не стоит. 😉
6 окт 2018 в 14:13
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
в Oracle 12c: это пример
CREATE TABLE CUSTOMER_DATA ( CD_ID INTEGER, CUST_NUMBER_ID INTEGER, FIRST_NAME NVARCHAR2(30), LAST_NAME NVARCHAR2(30), FLAG NVARCHAR2(10), CUST_ACTIVE INTEGER ); ALTER TABLE CUSTOMER_DATA ADD (FULL_NAME VARCHAR (50) NULL); ALTER TABLE CUSTOMER_DATA MODIFY (FLAG INVISIBLE, CUST_ACTIVE INVISIBLE); ALTER TABLE CUSTOMER_DATA MODIFY (FLAG VISIBLE, CUST_ACTIVE VISIBLE);
Отслеживать
ответ дан 19 сен 2018 в 12:18
1,887 8 8 серебряных знаков 23 23 бронзовых знака
Порядок столбцов в таблице в нормальном случае не должен играть ни какой роли. То есть, если стоит такая задача, то ранее были допущены ошибки в дизайне БД или использующих её приложений.
Если бы порядок столбцов был бы важен и нужен, то оператор AFTER уже скорее всего был бы реализован в стандарте SQL.
Если всё-таки в редких случаях порядок столбцов желателен, например, для генераторов кода, то самое простое использовать представление вместо физической таблицы.
Изменение порядка столбцов в представлении не затрагивает структуры физической таблицы (indexes, constraints, triggers и пр.), то есть по-сути пройдёт «безболезнено»:
create table itemstab (id number, name varchar2 (32), changed timestamp); -- возникла необходимость добавить столбец alter table itemstab add (memo varchar2 (64)); create or replace view items as select id, name, memo, changed from itemstab; insert into items values (1, 'item 1', 'memo 1', systimestamp); select rowid, i.* from items i; ROWID ID NAME MEMO CHANGED ------------------ ---------- ---------- ---------- ----------------------------- AAAS+TAAQAAAFrHAAA 1 item 1 memo 1 2018-10-06 12:59:57,373961000
И только в крайнем случае, можно воспользоваться многочисленными решениями, например, в этой ветке на enSO. Самый, по-моему мнению, правильный путь там отсутствует — выгрузить данные, пересоздать таблицу с «нуля», залить сохранённые данные.
В 12c появилась возможность изменить порядок столбцов изменением видимости уже существующих столбцов. Но основная цель введения невидимых столбцов — упростить миграцию старых, зависимых от порядка столбцов, приложений. Поэтому, этот способ добавить столбец в середину, иначе как «злоупотребленим» назвать нельзя — «от чего пытались уйти, туда и пришли». Подробнее в блоге Тома Кайта.
Добавление столбцов в набор данных
Добавляя столбцы, можно разработать собственные наборы данных. Например, можно создать новый столбец, объединяющий столбцы ADDRESS_LINE_1, ADDRESS_LINE_2 и ADDRESS_LINE_3.
- На главной странице выберите набор данных и в меню Действия выберите Открыть . На диаграмме данных или диаграмме объединения правой кнопкой мыши нажмите имя источника данных и нажмите Открыть , чтобы отобразить редактор преобразований.
- В редакторе преобразований нажмите Добавить этап подготовки .
- В разделе Создание запросов введите имя столбца и в поле «Выражение» определите выражение для добавления значений в столбец. Например, чтобы объединить значения в столбцах Категория и Подкатегория , можно указать выражение: CONCAT(Category, Sub Category) .
Используйте средство выбора функций f(x) для построения выражения с использованием операторов, математических, строковых функций и функций преобразования.
Oracle Analytics добавляет шаг на панель Сценарий подготовки.
Если вы работаете с одним набором данных таблицы или набором данных на основе файлов, нажмите Применить сценарий .
ALTER TABLE ОПЕРАТОР
В этом учебном пособии вы узнаете, как использовать в Oracle/PLSQL оператор ALTER TABLE, чтобы добавить столбец, изменить столбец, удалить столбец, переименовать столбец или переименовать таблицу (с синтаксисом, примерами и практическими упражнениями).
Описание
Оператор Oracle/PLSQL ALTER TABLE используется для добавления, изменения или удаления столбца в таблице. Оператор Oracle/PLSQL ALTER TABLE также используется для переименования таблиц.
Добавить столбец в таблицу
Синтаксис
Синтаксис ALTER TABLE для добавления столбца в таблицу Oracle:
ALTER TABLE table_name
ADD column_name column-definition;
Пример
Рассмотрим на примере, как добавить столбец в таблицу Oracle с помощью оператора ALTER TABLE.
Например:
Изменение порядка столбцов в таблице Oracle
Как правило это не является проблемой. С помощью SQL можно извлечь столбцы в любом порядке.
Если возникла потребность добавить столбец в таблицу в определенном порядке или поменять местами столбцы, то есть несколько способов:
1. Через создание промежуточной таблицы с переименование. После пересоздать все индексы и констрейны.
3. Через пакет DBMS_REDEFINITION
Нужны следующие привилегии:
# execute access on the dbms_redefinition package
# create any table # alter any table
# drop any table
# lock any table
# select any table
