Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 21:11   #1
T(h)rasher
Пользователь
 
Аватар для T(h)rasher
 
Регистрация: 24.09.2010
Сообщений: 46
По умолчанию значение по умолчанию

Есть некоторая таблица, в которую вводятся 4 строки:

CREATE TABLE Песня_из_альбома
(
код_общ integer NOT NULL PRIMARY KEY,
длител float,
номер integer NOT NULL,
код_песни integer REFERENCES Песня (код_песни),
код_альб integer REFERENCES Альбом (код_альб)
);

INSERT INTO Песня_из_альбома VALUES (3001,5.35,3,2008,1002);
INSERT INTO Песня_из_альбома VALUES (3003,2.55,7,2001,1001);
INSERT INTO Песня_из_альбома VALUES (3007,0,0,2004,1004);
INSERT INTO Песня_из_альбома VALUES (3005,2.23,5,2003,1007);

номер, заданный 0, нужно установить ПО УМОЛЧАНИЮ в 1. По идее должно выглядеть как-то так:

ALTER TABLE Песня_из_альбома modify (номер integer DEFAULT 1);

....но такой вариант не прокатывает - 0 в 1 не переходит. Мб и не должен?
"...Before you accuse me take a look at yourself..."
T(h)rasher вне форума Ответить с цитированием
Старый 14.04.2011, 22:00   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Триггер пишите если СУБД позволяет

UPD
Может прокатит если есть DEFAULT
INSERT INTO Песня_из_альбома (код_общ,длител,код_песни,код_альб)
VALUES (3005,2.23,2003,1007);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.04.2011 в 22:04.
Аватар вне форума Ответить с цитированием
Старый 14.04.2011, 22:11   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
но такой вариант не прокатывает - 0 в 1 не переходит. Мб и не должен?
И не должен!
напишите так:
Код:
INSERT INTO Песня_из_альбома (код_общ , длител, код_песни, код_альб )
  VALUES (3001, 5.35, 2008,1002);
Кстати, ALTER отрабатывает без ошибок?

и ещё, разные СУБД имеют чуть различный синтаксис - поэтому лучше указывать, какая именно у Вас СУБД.

и последнее, использование русских названий в именах таблиц и полей - вполне возможно нехорошо аукнется... (да и выглядит устращающе). Я бы, как ретроград и консерватор, не рекомендовал Вам использовать подобные штучки. Даже если СУБД это и позволяет...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.04.2011, 22:41   #4
T(h)rasher
Пользователь
 
Аватар для T(h)rasher
 
Регистрация: 24.09.2010
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Триггер пишите если СУБД позволяет
СУБД позволяет, т.к. это Oracle, но в данной лабе триггеров быть не должно, т.е. они не планировались преподом, поэтому наличие триггера не очень желательно. Скажем так, это вариант, выходящий за рамки лабы

все равно спасибо за помощь!
"...Before you accuse me take a look at yourself..."

Последний раз редактировалось T(h)rasher; 14.04.2011 в 22:45.
T(h)rasher вне форума Ответить с цитированием
Старый 14.04.2011, 22:44   #5
T(h)rasher
Пользователь
 
Аватар для T(h)rasher
 
Регистрация: 24.09.2010
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Кстати, ALTER отрабатывает без ошибок?

и ещё, разные СУБД имеют чуть различный синтаксис - поэтому лучше указывать, какая именно у Вас СУБД.

и последнее, использование русских названий в именах таблиц и полей - вполне возможно нехорошо аукнется... (да и выглядит устращающе). Я бы, как ретроград и консерватор, не рекомендовал Вам использовать подобные штучки. Даже если СУБД это и позволяет...
Без ошибок отрабатывает.
СУБД Oracle
насчет русских названий полностью согласен, но насколько мне известно, они мешать не должны. Хотя их использование действительно не желательно, эт я сильно ступил.

Да и основная проблема заключается в третьей строке, где 0 стоит в поле номера...со всеми остальными все ок

спасибо за помощь!
"...Before you accuse me take a look at yourself..."
T(h)rasher вне форума Ответить с цитированием
Старый 15.04.2011, 11:10   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Да и основная проблема заключается в третьей строке, где 0 стоит в поле номера...со всеми остальными все ок
проблема не в этом. проблема в том, что Вы не понимаете, что такое "значение по умолчанию" (default).
С чего Вы решили, что 0 (НОЛЬ) - это ОТСУТСТВИЕ значения?! Если Вы пишете в БД ноль, то туда должен быть записан ноль! Ещё не хватало, чтобы всякая тупая СУБД за меня решала, хочу я какое-то значение туда записать или не хочу!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.04.2011, 13:17   #7
T(h)rasher
Пользователь
 
Аватар для T(h)rasher
 
Регистрация: 24.09.2010
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Если Вы пишете в БД ноль, то туда должен быть записан ноль!
Т.е. вы хотите сказать, что записав в БД ноль как я это сделал, изменить его на единицу по умолчанию невозможно?
"...Before you accuse me take a look at yourself..."
T(h)rasher вне форума Ответить с цитированием
Старый 15.04.2011, 13:52   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Т.е. вы хотите сказать, что записав в БД ноль как я это сделал, изменить его на единицу по умолчанию невозможно?
Кто это должен сделать? (изменить записываемый ноль на 1 ? )
Вы - можете.
А ещё можно с помощью триггеров реализовать подобный механизм.

С помощью механизма "значение по умолчанию" подобную логику организовать нельзя. (imho, разумеется!)

Но можно сделать так, как я писал в пост #3 (т.е. просто выкинуть этот ноль (вместе с полем номер).
И тогда СУБД подставить вместо отсутствующего значения значение по умолчанию.

Последний раз редактировалось Serge_Bliznykov; 15.04.2011 в 13:55.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2011, 14:01   #9
T(h)rasher
Пользователь
 
Аватар для T(h)rasher
 
Регистрация: 24.09.2010
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

Но можно сделать так, как я писал в пост #3 (т.е. просто выкинуть этот ноль (вместе с полем номер).
И тогда СУБД подставить вместо отсутствующего значения значение по умолчанию.
т.е. если я хочу записать строку со значением номера, равным 1 по умолчанию, то вместо строки:

INSERT INTO Песня_из_альбома VALUES (3007,0,0,2004,1004); ,

я должен сделать так:

INSERT INTO Песня_из_альбома VALUES (3007,0,2004,1004);
ALTER TABLE Песня_из_альбома modify (номер integer DEFAULT 1);


И тогда значение в поле номер в таблице будет равно 1?
"...Before you accuse me take a look at yourself..."
T(h)rasher вне форума Ответить с цитированием
Старый 16.04.2011, 14:46   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

DEFAULT значение СУБД использует только при вставке и при отсутствии явного присваивания в это поле. Т.е.:
Код:
INSERT INTO Песня_из_альбома VALUES (3005,2.23,0,2003,1007) 
присвоит 0 в номер
INSERT INTO Песня_из_альбома (код_общ,длител,код_песни,код_альб) VALUES (3005,2.23,2003,1007)
присвоит DEFAULT в номер, в вашем случае 1
ALTER TABLE Песня_из_альбома modify (номер integer DEFAULT 1); делается один раз и его повторное выполнение никак не влияет на существующие записи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.04.2011 в 14:49.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
какое значение переменной integer по умолчанию? vitaliy1911 Общие вопросы Delphi 11 25.05.2010 14:36
Как установить значение по умолчанию в dropdown notna Microsoft Office Word 2 13.04.2010 17:15
Значение поля по умолчанию alco84 Microsoft Office Access 2 16.02.2010 10:17
Как добавить "значение по умолчанию" в базе Access? bafy БД в Delphi 6 13.02.2009 12:29
Как вставить значение в список по умолчанию mogul82 HTML и CSS 3 28.12.2008 17:10