Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как правильно создать таблицу? / 14 сообщений из 14, страница 1 из 1
21.05.2003, 10:51
    #32164733
Fredej
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
Мне необходимо создать поле в таблице, такое чтобы все значения в нем были разные, но при этом можно было хранить несколько значений NULL.
Спасибо.
...
Рейтинг: 0 / 0
21.05.2003, 10:55
    #32164742
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
Пиши триггер с проверкой - если не ноль то нот ексист :)
...
Рейтинг: 0 / 0
21.05.2003, 11:02
    #32164758
Fredej
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
Вы наверно непоняли, столбец может хранить несколько NULL, но другие значения не должны повторяться.
...
Рейтинг: 0 / 0
21.05.2003, 11:26
    #32164809
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
я правильно понял :) уникальный констраинт ты не поставишь поскольку он not null должен быть. Только триггер перед вставкой или может еще на апдейт спасет отца русской демократии

if (NEW.Поле is not null) then begin
if( exist (select Поле
from Таблица
where NEW.Поле = Поле ))
then begin
exception Ошибка ;
end
end

триггер с таким телом пропустит null значения и не пропустит повторяющиеся значения в поле.
...
Рейтинг: 0 / 0
21.05.2003, 11:47
    #32164835
Fredej
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
Попробовал написать триггер по вашему примеру, но он не хочет компилироваться, ошибка на SELECT.
...
Рейтинг: 0 / 0
21.05.2003, 11:58
    #32164853
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
дай объявление таблицы скину текст триггера
...
Рейтинг: 0 / 0
21.05.2003, 12:02
    #32164861
Fredej
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
Извините я недавно этим занимаюсь. ЧТО СДЕЛАТЬ?
...
Рейтинг: 0 / 0
21.05.2003, 12:08
    #32164871
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
скрипт типа:
create table Таблица (
Поле integer ;
);
...
Рейтинг: 0 / 0
21.05.2003, 12:16
    #32164889
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
дейчтвительно ошибка должно быть EXISTS
...
Рейтинг: 0 / 0
21.05.2003, 12:17
    #32164890
Fredej
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
У меня есть следующая таблица
CREATE TABLE "FON"
(
"ID_FON" INTEGER NOT NULL,
"FON_DESCRIPT" CHAR(50) CHARACTER SET WIN1251 NOT NULL,
"FON_FILENAME" CHAR(50) CHARACTER SET WIN1251,
"ID_CHANNEL" INTEGER NOT NULL,
PRIMARY KEY ("ID_FON"),
UNIQUE ("FON_DESCRIPT", "FON_FILENAME", "ID_CHANNEL")
);
Какой необходимо написать триггер, чтобы поле FON_FILENAME хранило несколько NULL и нехранило остальных повторяющихся значений?
...
Рейтинг: 0 / 0
21.05.2003, 12:34
    #32164917
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
CREATE TABLE "FON"
(
"ID_FON" INTEGER , /* not null - убрать */
"FON_DESCRIPT" CHAR(50) CHARACTER SET WIN1251 NOT NULL,
"FON_FILENAME" CHAR(50) CHARACTER SET WIN1251,
"ID_CHANNEL" INTEGER NOT NULL,
/* PRIMARY KEY ("ID_FON"), не катит */
UNIQUE ("FON_DESCRIPT", "FON_FILENAME", "ID_CHANNEL")
);

CREATE EXCEPTION BAD_FON 'ID_FON must NULL or Unigue';

CREATE TRIGGER INSERT_FON FOR FON
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (NEW.ID_FON is not null) then begin
if( exists (select ID_FON
from FON
where NEW.ID_FON = ID_FON ))
then begin
exception BAD_FON ;
end
end
end
...
Рейтинг: 0 / 0
21.05.2003, 12:35
    #32164920
Acue
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
ошибка
Код: plaintext
create exception  "NotUniqueFonFileName"  'Повторяющееся имя файла фона'
триггер before insert
Код: plaintext
1.
2.
3.
4.
5.
6.
... as
begin
if (exists (select a. "ID_FON"  
              from  "FON"  a 
             where NEW. "FON_FILENAME"  = a.NEW. "FON_FILENAME" )) 
then exception  "NotUniqueFonFileName" ; 
end
триггер before update
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
... as
begin
if (exists (select a. "ID_FON"  
              from  "FON"  a 
             where a. "ID_FON" <>NEW. "ID_FON"  and
                   a. "FON_FILENAME"  = NEW. "FON_FILENAME" )) 
then exception  "NotUniqueFonFileName" ; 
end
...
Рейтинг: 0 / 0
21.05.2003, 12:40
    #32164931
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
В FB 1.5 сделано соответствие уникальных ключей стандарту SQL92 и там можно хранить значение NULL в UNIQUE ключах. Так что можете съехать на него.
...
Рейтинг: 0 / 0
21.05.2003, 13:10
    #32164998
Fredej
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно создать таблицу?
СПАСИБО.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как правильно создать таблицу? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]