Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопрос о CONSTRAINT NOT NULL ?  [new]
student42
Member

Откуда:
Сообщений: 246
Есть таблица TEST1 c следующей структурой:
автор

( field1 number,
field 2 number);


Записи в таблице
автор

field1 | field2
---------------
null | 7
15 | 3


как можно создать CONSTRAINT NOT NULL на поле FIELD1 ???
14 июл 10, 12:14    [9101214]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
JaRo
Member

Откуда:
Сообщений: 1659
Придумать, что делать с первой записью (удалить/проапдейтить), потом добавить констрейнт.
14 июл 10, 12:16    [9101223]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
student42
Member

Откуда:
Сообщений: 246
JaRo
Придумать, что делать с первой записью (удалить/проапдейтить), потом добавить констрейнт.


а если не представляется возможным изменить данные?
14 июл 10, 12:17    [9101229]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
JaRo
Member

Откуда:
Сообщений: 1659
student42
JaRo
Придумать, что делать с первой записью (удалить/проапдейтить), потом добавить констрейнт.
а если не представляется возможным изменить данные?
Тогда не предсталяется возможным повесить констрейнт.
ЗЫ: Можете создать NOVALIDATE, но кому он такой нужен...
14 июл 10, 12:19    [9101244]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
А разве этого мало?
Guest
JaRo
ЗЫ: Можете создать NOVALIDATE, но кому он такой нужен...

SQL> create table aaa (a date);

Table created.

SQL> insert into aaa values (sysdate);

1 row created.

SQL>  insert into aaa values (null);

1 row created.

SQL> commit;

Commit complete.

SQL> alter table aaa add constraint aaa_con check (a is not null) novalidate;

Table altered.

SQL> insert into aaa values (null);
insert into aaa values (null)
*
ERROR at line 1:
ORA-02290: check constraint (OPP.AAA_CON) violated
14 июл 10, 12:26    [9101283]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
JaRo
ЗЫ: Можете создать NOVALIDATE, но кому он такой нужен...
Ну, хоть что-то будет - новые NULL в поле не попадут...
А со временем либо найдет способ, как поправить данные, либо как-то рассосется проблема...
14 июл 10, 12:27    [9101288]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
SQL*Plus,

Либо импорт-экспорт сделает
14 июл 10, 12:31    [9101317]     Ответить | Цитировать Сообщить модератору
 RE: Оптимизатору будет неизвестно есть в этом поле NULLы или нет  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
А разве этого мало?,
(см. RE: на сабж двумя строками выше)
:-)
14 июл 10, 12:31    [9101321]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vano-1981
Member

Откуда:
Сообщений: 62
Тема годовалой давности, но все же напишу - вдруг кому понадобится.
Создание именованого ограничения NOT NULL на примере скрипта пересоздания поля с сохранением значений.

-- Добавляем временное поле
alter table myTableXXX add(tmp   number(4));
-- Сохраняем во временное поле значения и commit для предохранения
update myTableXXX set tmp = to_char(myField1);
commit;

-- Прибиваем старое поле
alter table myTableXXX drop column myField1 ;
-- Создаем новое поле с новым типом и без ограничения NOT NULL
alter table myTableXXX add(myField1   varchar2(10));

-- Пишем в новое поле сохраненные ранее значения и commit для предохранения
update myTableXXX set myField1 = nvl(tmp, -1);
commit;
-- Добавляем именованое ограничение NOT NULL
alter table myTableXXX modify(
  myField1 constraint cnn_myField1  not null
);

-- Прибиваем временное поле
alter table myTableXXX drop column tmp ;
17 янв 12, 14:44    [11918021]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Vano-1981,
ай молодца вано, просто пЭрсик как молодца))... а чего просто проапдейтить старое поле твоим nvl(tmp, -1); и повесь ограничение было мало?) надо было собирать двигатель именно через выхлопную трубу?)))) Да ты просто КЭП!!! Тебе б мозги для "предохранения"))
17 янв 12, 14:48    [11918088]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Elic
Member

Откуда:
Сообщений: 29980
Vano-1981
но все же напишу - вдруг кому понадобится.
Такой шедевр тупости - никому.
17 янв 12, 14:57    [11918191]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vano-1981
Member

Откуда:
Сообщений: 62
автор
а чего просто проапдейтить старое поле твоим nvl(tmp, -1);

Изначально myField1 был number(4), затем стал varchar2(10).
При этом в таблице myTableXXX уже есть данные, которые нельзя терять.

Подход демонстрирует способ конвертации типа поля без потери данных.
Исходный-конечный тип может быть другим и конвертироваться не nvl(...), а более сложным алгоритмом.
17 янв 12, 15:07    [11918317]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Vano-1981,
продолжаешь искромётно тупить?) или думаеш я не заметил все эти тучары в нумберы и обратно?))))) клоун)
17 янв 12, 15:35    [11918598]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vano-1981
Member

Откуда:
Сообщений: 62
автор
Vano-1981,
продолжаешь искромётно тупить?) или думаеш я не заметил все эти тучары в нумберы и обратно?))))) клоун)

Жду пояснений. Интересно как решить задачу не "через выхлопную трубу".
17 янв 12, 16:02    [11918919]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Vano-1981,
сначала порадуй меня и скажи зачем было менять тип у столбца? и где у автора топика такая необходимость написана?) а еще где у автора написана необходимость в null столбцы вставить -1?))) а потом я подумаю что тебе ответить) причем заметь. я тебе ничем не обязан. поэтому могу и просто послать)
17 янв 12, 16:07    [11918958]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vano-1981
Member

Откуда:
Сообщений: 62
Vint
скажи зачем было менять тип у столбца?

Vano-1981
Создание именованого ограничения NOT NULL на примере ...

Чтобы не париться, я модифицировал готовый скрипт и выложил.
Для нужд топикстартера этого не нужно делать.
Пример не обязан быть конечным решением задачи, но должен содержать ответ на заданый вопрос.

Вопрос был:
student42
как можно создать CONSTRAINT NOT NULL на поле FIELD1 ???

В моем куске кода ответ в строчке
alter table myTableXXX modify(
  myField1 constraint cnn_myField1  not null
);


Vint
а еще где у автора написана необходимость в null столбцы вставить -1?

Не было, но без устранения NULL-ов перед наложением NOT NULL не обойтись.

Итак, я ответил на вопросы. Жду контраргуметы или извинения.
17 янв 12, 16:23    [11919140]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Vano-1981
автор
Vano-1981,
продолжаешь искромётно тупить?) или думаеш я не заметил все эти тучары в нумберы и обратно?))))) клоун)

Жду пояснений. Интересно как решить задачу не "через выхлопную трубу".
Не совсем понятно твое стремление изменить тип колонки, но для этой манипуляции обычно обходятся:
1. create tmp column + rename column
create table myTableXXX(myField1 number(4));
insert into myTableXXX select null from dual union all select 15 from dual;
alter table myTableXXX add(tmp varchar2(10));
update myTableXXX set tmp = to_char(nvl(myField1,-1));
alter table myTableXXX modify(tmp constraint cnn_myField1 not null);
alter table myTableXXX drop column myField1;
alter table myTableXXX rename column tmp to myField1;
или
2. create tmp table as select + rename table + create constraints если необходимо
17 янв 12, 16:27    [11919205]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Vano-1981
Пример не обязан быть конечным решением задачи, но должен содержать ответ на заданый вопрос.
Если твой пост был ответ топикстартеру - то действительно жесть. Вполне можно было ограничиться (если уж разрешено апдейтить в -1):
update myTableXXX set myField1 = nvl(myField1,-1);
alter table myTableXXX modify(myField1 constraint cnn_myField1 not null);
17 янв 12, 16:32    [11919270]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
-2-
Member

Откуда:
Сообщений: 15330
Vano-1981
В моем куске ...
ну и зачем автору или еще кому ковыряться в твоем куске, если ответ был дан еще полтора года назад.
17 янв 12, 16:36    [11919321]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vano-1981
Member

Откуда:
Сообщений: 62
dbms_photoshop
Vano-1981
Пример не обязан быть конечным решением задачи, но должен содержать ответ на заданый вопрос.
Если твой пост был ответ топикстартеру - то действительно жесть. Вполне можно было ограничиться (если уж разрешено апдейтить в -1):
update myTableXXX set myField1 = nvl(myField1,-1);
alter table myTableXXX modify(myField1 constraint cnn_myField1 not null);


Топикстартер давно сюда не заходит. Ответ был расчитан на тех, кто столкнется с проблеммой топикстартера + дополнительная информация для тех, у кого уже есть NULLы в данных.

Не совсем понятно твое стремление изменить тип колонки, но для этой манипуляции обычно обходятся:
1. create tmp column + rename column

Это оптимизированая версия того, что я написал. Без лишних commin и update. Суть не поменялась.

2. create tmp table as select + rename table + create constraints если необходимо

С таким синтаксисом не сталкивался. Ссылочку на ман, если нетрудно.

-2-
ну и зачем автору или еще кому ковыряться в твоем куске, если ответ был дан еще полтора года назад.

Для помощи тем, кого гугл пришлет сюда завтра и послезавтра.
Если бы кто-то ответил в эту тему вчера, то я сегодня не убил бы 3 часа на поиски решения.
17 янв 12, 16:48    [11919454]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Vano-1981
Топикстартер давно сюда не заходит. Ответ был расчитан на тех, кто столкнется с проблеммой топикстартера + дополнительная информация для тех, у кого уже есть NULLы в данных.
Тогда тебе еще раз надо повторить, что конвертация типа данных здесь маразм?
17 янв 12, 16:58    [11919581]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vano-1981
Member

Откуда:
Сообщений: 62
dbms_photoshop
Тогда тебе еще раз надо повторить, что конвертация типа данных здесь маразм?[/quot]
Если field1 это № накладной, который изначально был NUMERIC, а затем вдруг неожиданно стал "шифром товара", то не маразм.

Ладно, хватит флудить. Ответ есть, и ладно. Кому надо, будут конвертить, кому не надо - не будут.
17 янв 12, 17:06    [11919685]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Vano-1981,
иди лучше поработай)) а то как то странно получается, сам придумал задачу сам реализовал, причем ни постановка ни реализация никак не коррелирует с вопросом ТС, короче хорошая у тебя трава Друх)
17 янв 12, 17:11    [11919726]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
-2-
Member

Откуда:
Сообщений: 15330
Vano-1981
-2-
ответ был дан еще полтора года назад
Для помощи тем, кого гугл пришлет сюда завтра и послезавтра.
Если бы кто-то ответил в эту тему вчера, то я сегодня не убил бы 3 часа на поиски решения.
Тем, кто не способны по синтаксической картинке в sql reference, снабженной примерами, написать команду, гугл мозгов добавит.

Vano-1981
не маразм
замечено. уровень незнаний коррелирует с неспособностью осознать ошибки.
17 янв 12, 17:14    [11919746]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о CONSTRAINT NOT NULL ?  [new]
SysOper
Member

Откуда: M
Сообщений: 9760


Админы! за что вы убивали бы разработчиков?
17 янв 12, 17:45    [11920025]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить