我想列出所有 Firebird 检查约束及其条件。
我使用了下面的查询,但是这个查询只显示了约束名称和它的表。我也想看看约束条件。
SELECT * FROM RDB$RELATION_CONSTRAINTS
检查约束是用触发器实现的。以下查询将向您显示检查约束的来源。
select cc.RDB$CONSTRAINT_NAME, t.RDB$RELATION_NAME, t.RDB$TRIGGER_TYPE, t.RDB$TRIGGER_SOURCE
from RDB$RELATION_CONSTRAINTS rc
inner join RDB$CHECK_CONSTRAINTS cc using (RDB$CONSTRAINT_NAME)
inner join RDB$TRIGGERS t using (RDB$TRIGGER_NAME, RDB$RELATION_NAME)
where rc.RDB$CONSTRAINT_TYPE = 'CHECK'
此查询将报告约束两次,因为在当前版本的 Firebird 中,检查约束是通过两个单独的触发器实现的:
before insert
触发器(type = 1)和 before update
触发器(type = 3)。这是一个实现神器。
获取触发器之一的来源的查询(因为两者相同):
select
rc.RDB$CONSTRAINT_NAME,
rc.RDB$RELATION_NAME,
(select first 1 RDB$TRIGGER_SOURCE
from RDB$TRIGGERS
where RDB$TRIGGER_NAME = cc.RDB$TRIGGER_NAME) as TRIGGER_SOURCE
from RDB$RELATION_CONSTRAINTS rc
inner join RDB$CHECK_CONSTRAINTS cc using (RDB$CONSTRAINT_NAME)
where rc.RDB$CONSTRAINT_TYPE = 'CHECK'