Как удалить существующий индекс в Firebird? - PullRequest
0 голосов
/ 04 февраля 2020

Какой скрипт я должен создать, чтобы проверить, существует ли этот индекс? Поскольку я хочу, чтобы этот индекс был удален, если он был создан, а затем снова создал индекс

CREATE INDEX IF NOT EXISTS IDX_TABLE ON TABLE (ID, DATE)

Мне нужен только один скрипт, чтобы сделать его автоматически. Я не нашел альтернативы для with drop_existing = ON как в MS SQL.

1 Ответ

1 голос
/ 04 февраля 2020

К сожалению, Firebird не позволяет вам условно удалить или создать индекс на своем диалекте SQL. Если вы выполняете для каждого оператора, вы можете отлавливать ошибки и игнорировать соответствующие коды ошибок. В качестве альтернативы вы можете использовать исполняющий блок , например:

execute block as
begin
  if (exists(select * from rdb$indices where rdb$index_name = 'IDX_TABLE')) then
    execute statement 'drop index IDX_TABLE';
end

Необходимо использовать execute statement, потому что PSQL (процедурный Firebird язык) не поддерживает операторы DDL напрямую.

Если вместо этого вы хотите условно создать индекс, вы можете использовать:

execute block as
begin
  if (not exists(select * from rdb$indices where rdb$index_name = 'IDX_TABLE')) then
    execute statement 'create index IDX_TABLE on table (id, name)';
end

Таблица RDB$INDICES представляет собой систему Firebird таблица .

...