К сожалению, 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 таблица .