#sql #oracle #rdbms
#sql #Oracle #СУБД
Вопрос:
Я использую Oracle 10 G, я хочу уменьшить размер столбца с 30 до 20 символов. Имя таблицы — это member
, столбец — это member_name
, это varchar2(30)
тип данных.
Мой вопрос: есть ли какой-либо запрос для этого? Если да, то что это такое?
Комментарии:
1. @OldProgrammer, ответ, который вы упомянули как дубликат, не содержит достаточных подробностей и фактически отличается от этого вопроса. (В этом вопросе OP попросил увеличить размер столбца, а в этом вопросе OP попросил уменьшить размер — для обоих сценариев требуется разное решение).
Ответ №1:
Вы можете изменить длину строк столбцов на месте. Но вы получаете сообщение об ошибке, если существующие значения слишком велики. Итак, просто сначала сократите столбец:
update t
set col = substr(col, 1, 20)
where length(col) > 20;
Затем:
alter table t modify x varchar2(20)
Вот скрипка db<>.
Я настоятельно рекомендую этот подход, поскольку он совместим с существующими ограничениями и индексами.
Ответ №2:
Вы не можете напрямую уменьшить размер VARCHAR2
столбца, если в нем есть какие-то данные.
Вам необходимо
- создайте новый столбец с уменьшенным размером.
- Заполните данные в новом столбце
- удалите старый столбец
- переименуйте новый столбец
запросы должны быть следующими:
alter table member add member_name_new varchar2(20);
update member set member_name_new = member_name;
alter table member drop column member_name;
alter table member rename column member_name_new to member_name;
Комментарии:
1. Спасибо за ваше решение. Но в строке 3 появляется ошибка «отсутствует ключевое слово», пожалуйста, проверьте ее.
2. О-о-о, я понял. Проверьте ответ прямо сейчас.
alter table member drop member_name;
3. Спасибо, но, как я обнаружил ошибку, в ней отсутствовала «колонка». Это должно быть ALTER Член ТАБЛИЦЫ DROP СТОЛБЕЦ имя_элемента;
4. Вы правы. Ключевое слово Infact column также необходимо при ПЕРЕИМЕНОВАНИИ. Обновлен ответ.
5. Да! Спасибо 🙂