web-dev-qa-db-ja.com

Firebirdに制約が存在するかどうかを確認するにはどうすればよいですか?

多数のFirebirdデータベースを一度に更新するスクリプトを公開しようとしています。一部にはこの制約がないため、ドロップする前に制約の存在を確認したいと思います。

ALTER TABLE PROCESS_CATEGORY DROP CONSTRAINT INTEG_669;
2
Jharwood

RDB$RELATION_CONSTRAINTSテーブル、制約の名前がわかっている場合。このようなもの:

set term ^;
execute block as
begin
    if (exists(
        select 0 from rdb$relation_constraints
        where rdb$constraint_name = 'INTEG_669'
    )) then
        execute statement 'alter table process_category drop constraint INTEG_669';
end
^
set term ;^

中古 execute statement理由はalter tableはブロック内では許可されておらず、ifステートメントは外部では許可されていません。

4
Sergei Ousynin