Проблема с Create Index

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Йосико
Сообщения: 2
Зарегистрирован: 29 авг 2006, 15:54

Проблема с Create Index

Сообщение Йосико » 29 авг 2006, 16:12

Делаю табличку:

Код: Выделить всё

create table objProcedures (
  ProcID       integer not null,
  ProcName     varchar(60) not null,
  ProcDesign   varchar(30) not null,
  ProcType     integer not null,
  ProcChgnDate date not null,
  MethID       integer,
  SysSubCode   integer,
  ProcDescr    blob sub_type -1,
  Who          varchar(30),
  Blocks       integer
);

Код: Выделить всё

alter table OBJPROCEDURES
  add constraint PK_OBJPROCEDURES primary key (PROCID);

Код: Выделить всё

alter table OBJPROCEDURES
  add constraint UQ_OBJPROCEDURES_PP unique (PROCNAME, PROCDESIGN);

Код: Выделить всё

create index IDX_OBJPROCEDURES_PROCDESIGN on OBJPROCEDURES (UPPER(PROCDESIGN));
- И вот здесь ошибка!!! (Upper)

Пробовал писать "computed by (upper(PROCDESIGN))"
Тогда индекс создаётся, но по какому полю непонятно.... Видимо не по какому : (.

Пробовал Функцию upper заменить на rupper (из rFunc) то же.

В SQL я совсем новичёк. В чём тут секрет?
(У меня FireBird_2_0)
:oops:

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 авг 2006, 16:24

В SQL я совсем новичёк. В чём тут секрет?
(У меня FireBird_2_0)
читай в FB 2 release notes про вычисляемые индексы.

Йосико
Сообщения: 2
Зарегистрирован: 29 авг 2006, 15:54

Сообщение Йосико » 29 авг 2006, 16:44

Читал раз 8.

Не понял ...
У меня не хватает только строчки "COLLATION PXW_CYRL".
Я думал она нужна только для функции upper..... А почему тогда не работает rupper? Ну да ладно....

Ошибка:
Undefined name.Dynamic SQL Error.
SQL error code = -204.
Data type unknown.
COLLATION PXW_CYRL for CHARACTER SET NONE is not defined.

Как её определять?
Или дело не в этом?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 авг 2006, 16:48

не туда ты полез:

create index IDX_OBJPROCEDURES_PROCDESIGN on OBJPROCEDURES computed by (UPPER(PROCDESIGN));

и все.
Тогда индекс создаётся, но по какому полю непонятно.... Видимо не по какому : (.
если ты прочитал правильно, то - индекс, созданный таким образом будет использоваться только при использовании в where той же самой функции, что была указана в computed by:

select * from objprcedures
where upper(procdesign) = :param

или в этом роде (upper(procdesign) = upper(:param)).

p.s. не используй слишком длинные имена объектов. ограничься 24мя символами, к примеру.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 авг 2006, 16:50

У меня не хватает только строчки "COLLATION PXW_CYRL".
www.ibase.ru/devinfo/ibrusfaq.htm

collate для upper уже не нужен в FB 1.5. и тем более в FB 2.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 29 авг 2006, 17:33

Йосико писал(а):Читал раз 8.
Это хорошо.
Йосико писал(а): COLLATION PXW_CYRL for CHARACTER SET NONE
Теперь иди читай http://www.ibase.ru/devinfo/ibrusfaq.htm

Ответить