как изменить тип поля в таблице?

Тема в разделе "SQL", создана пользователем Sh00r00p, 20 авг 2007.

  1. Sh00r00p

    Sh00r00p Гость

    Репутация:
    0
    подскажите пожалуйста, как изменить поле теблицы с возможным значением null на not null?
    при записи
    alter table EXPTARIF modify EXPTARIFPLAN_FR not null;
    выдает ошибку
    "ora- 02296: не могу разблокировать - найдены пустые значения
    --Add/modify columns
    alter table EXPTARIF modify EXPTARIFPLAN_FR not null"
     
  2. Over

    Over Well-Known Member

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Всё правильно! Если у тебя в таблице есть записи, то в них обязательно должно быть задано значение этого поля. Иначе при изменении типа на NOT NULL система предполагает, что значение не должно быть пустым, а у тебя получается пустое, и поэтому возникает ошибка.
     
  3. Sh00r00p

    Sh00r00p Гость

    Репутация:
    0
    что делать? как поменять тип поля? я вставил в таблицу поле но значения я туда не вводил...

    почему-то косяк именно с этим полем! остальные поля которые я внес чуть позже меняются нормально.

    еще одна штуковина которая вызвала у меня подозрение: это поле сначало не вставлялось и все поля которые начинались на EXPTARIFPLAN_* тоже, потом я взял и удалил эту таблицу с тестовой базы и создал новую с этим полем имеющим "not null" и попытался перекинуть все значения с боевой, но он мне выдал ошибку что поле не может быть not null т.к. есть какие-то значения хотя этого поля раньше не существовало. ну я и сделал поле с "null". теперь пытаюсь поменять с null на not null.
     
  4. Sh00r00p

    Sh00r00p Гость

    Репутация:
    0
    так, я сделал... я все значения обнулил
    update exptarif set EXPTARIFPLAN_post = 0;
    а потом
    alter table EXPTARIF modify EXPTARIFPLAN_FR not null;
    теперь все работает.

    но от чего у меня случилась эта штуковина я так и не понял!
     
  5. Over

    Over Well-Known Member

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    У тебя не работало, потому, что были записи, в которых это поле было пустое, без значения. А NOT NULL предполагает, что значение обязательно должно быть. Поэтому и не срабатывало. Тебе нужно было сначала заполнить какими-нибудь значениями все поля, у которых это значение было пустым.
     
  6. Sh00r00p

    Sh00r00p Гость

    Репутация:
    0
    да, видать где-то касяк при заполнении с боевой базы был
     
  7. Olala

    Olala Гость

    Репутация:
    0
    Согласно ограничению целостности NOT NULL, значение, хранящееся в базе данных не может быть неопределенным.
    Проще всего использовать вдобавок к ограничению NOT NULL конструкцию DEFAULT <значение>:
    Код (Text):
    alter table EXPTARIF modify EXPTARIFPLAN_FR default 0 not null;
    Тогда не придется контролировать заполнение этого поля определенными значениями при редактировании таблицы.
     
Загрузка...

Поделиться этой страницей