特定のインデックスが存在し、正しく作成されることを保証するFirebirdスクリプトを作成しようとしています。少しグーグルした後、正しい構文と思われるものが得られました。
SET TERM ^ ;
execute block as begin
IF (EXISTS(SELECT RDB$INDEX_NAME
FROM RDB$INDICES
WHERE RDB$RELATION_NAME='TABLE_NAME'
and RDB$INDEX_NAME = 'INDEX_NAME')) THEN
execute statement 'drop index INDEX_NAME';
end
SET TERM ; ^
CREATE UNIQUE INDEX INDEX_NAME
ON TABLE_NAME
(FIELD1, FIELD2, FIELD3);
これは1回実行され、正常に機能します。しかし、もう一度実行しようとすると、「インデックスはすでに存在します」というエラーが表示されます。これは、execute statement
パーツが実際に実行されていないことを示しています。
私は何が欠けていますか?このスクリプトを正しく機能させるにはどうすればよいですか?