如何检查 Firebird 上是否存在约束?

Jha*_*ood 4 firebird

我即将发布一个脚本,它将一次更新许多 Firebird 数据库。有些没有这个约束,所以我想在我尝试删除它之前检查约束是否存在。

ALTER TABLE PROCESS_CATEGORY DROP CONSTRAINT INTEG_669;
Run Code Online (Sandbox Code Playgroud)

Ser*_*nin 6

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 ;^
Run Code Online (Sandbox Code Playgroud)

使用execute statement是因为alter table块内部不允许,if语句外部不允许。