powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как правильно создать таблицу?
14 сообщений из 14, страница 1 из 1
Как правильно создать таблицу?
    #32164733
Fredej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне необходимо создать поле в таблице, такое чтобы все значения в нем были разные, но при этом можно было хранить несколько значений NULL.
Спасибо.
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #32164742
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пиши триггер с проверкой - если не ноль то нот ексист :)
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #32164758
Fredej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы наверно непоняли, столбец может хранить несколько NULL, но другие значения не должны повторяться.
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #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
Как правильно создать таблицу?
    #32164835
Fredej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал написать триггер по вашему примеру, но он не хочет компилироваться, ошибка на SELECT.
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #32164853
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дай объявление таблицы скину текст триггера
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #32164861
Fredej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините я недавно этим занимаюсь. ЧТО СДЕЛАТЬ?
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #32164871
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скрипт типа:
create table Таблица (
Поле integer ;
);
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #32164889
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дейчтвительно ошибка должно быть EXISTS
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #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
Как правильно создать таблицу?
    #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
Как правильно создать таблицу?
    #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
Как правильно создать таблицу?
    #32164931
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В FB 1.5 сделано соответствие уникальных ключей стандарту SQL92 и там можно хранить значение NULL в UNIQUE ключах. Так что можете съехать на него.
...
Рейтинг: 0 / 0
Как правильно создать таблицу?
    #32164998
Fredej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПАСИБО.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как правильно создать таблицу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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