FB 2.0: Constraint check "для поля" не существует?

чччД
Дата: 04.06.2012 16:17:05
Предположим, для таблички

create table A
( F1 int
)


добавляем поле,
alter table A add F2 int constraint chk_f2 check (F2 <> F1) 


Э... constraint chk_f2 будет относиться не к полю, а на табличке?
Чтобы ограничение именно к полю относилось, нужно домены юзать?

Готов к закиданию тапками.
чччД
Дата: 04.06.2012 16:37:11
Глупый вопрос возник в связи с тем, что понадобилось убить "неименованный" check - констреинт, ранее объявленный при добавления поля.
Попытался найти его в системных табличках применительно полю, с которым констреинт был объявлен... с удивлением обнаружил, что чек - констреинты "живут" в контексте всей таблички, и про поле ничего не знают...

Век живи - век учись...
чччД
Дата: 04.06.2012 18:02:25
А что ж их (чек констреинты) объявлять на уровне поля (при добавлении поля , например) тогда можно? ...если им на поле начхать...

..."стандарт"? :)
Мимопроходящий
Дата: 04.06.2012 18:11:58

Hello, чччД!
You wrote on 4 июня 2012 г. 18:11:22:

чччД
> А что ж их (чек констреинты) объявлять на уровне поля (при
добавлении поля , например) тогда можно?
пофиг.
один хрен будет создан чек констрейнт уровня таблицы.

Posted via ActualForum NNTP Server 1.5

чччД
Дата: 04.06.2012 18:15:39
Мимопроходящий
Hello, чччД!
You wrote on 4 июня 2012 г. 18:11:22:

чччД
> А что ж их (чек констреинты) объявлять на уровне поля (при
добавлении поля , например) тогда можно?
пофиг.
один хрен будет создан чек констрейнт уровня таблицы.

Так и я об этом...

В общем, пофиг, да, раз "VALUE" только в чеках домена доступен... но как-то странно это.
kdv
Дата: 04.06.2012 18:15:49
вообще-то табличный constraint это именно табличный, а не "столбцовый", потому что в нем можно ссылаться на столбцы таблицы, а не только на конкретный столбец.
а что его можно цеплять к объявлению столбца - ну да, стандарт.
чччД
Дата: 04.06.2012 18:17:14
kdv
вообще-то табличный constraint это именно табличный, а не "столбцовый", потому что в нем можно ссылаться на столбцы таблицы, а не только на конкретный столбец.
а что его можно цеплять к объявлению столбца - ну да, стандарт.

Хорошая у нас "отмазка"...

Спасибо.
kdv
Дата: 04.06.2012 18:25:24
чччД
Хорошая у нас "отмазка".

непонятно, при чем тут отмазка. Это вообще-то table check constraint. И точно так же, как и PK, FK, Unique, его можно писать как отдельно, так и прямо в объявлении столбца.
create table A(
id int not null primary key,

тебя не напрягает?

слава богу, все это одинаково практически для всех SQL серверов.
чччД
Дата: 04.06.2012 18:31:59
kdv
чччД
Хорошая у нас "отмазка".

непонятно, при чем тут отмазка. Это вообще-то table check constraint. И точно так же, как и PK, FK, Unique, его можно писать как отдельно, так и прямо в объявлении столбца.
create table A(
id int not null primary key,

тебя не напрягает?

слава богу, все это одинаково практически для всех SQL серверов.


Да вот как-то PK/FK вопросов не вызывали, а тут прям "разрыв шаблона"...да еще в понедельник...
чччД
Дата: 04.06.2012 19:18:36
Э... а теперь грохнуть "неименованные" check - констреинты для таблички как лучше?


В принципе, у меня для этой таблички они все "неименованные", поэтому...
execute block (
    I_REL_NAME int = :RELATION_NAME)
as
declare variable F_CNSTR_NAME varchar(255);
begin
  for select RC.RDB$CONSTRAINT_NAME
      from RDB$RELATION_CONSTRAINTS RC
      where RC.RDB$CONSTRAINT_TYPE = 'CHECK' and
            RC.RDB$RELATION_NAME = :I_REL_NAME
      into F_CNSTR_NAME
  do
    execute statement 'ALTER TABLE ' || I_REL_NAME || ' DROP CONSTRAINT ' || F_CNSTR_NAME;
end

... но может, что-то более правильное подскажете?