所有 Firebird 检查约束条件

问题描述 投票:0回答:1

我想列出所有 Firebird 检查约束及其条件。

我使用了下面的查询,但是这个查询只显示了约束名称和它的表。我也想看看约束条件。

SELECT * FROM RDB$RELATION_CONSTRAINTS
firebird firebird2.5
1个回答
1
投票

检查约束是用触发器实现的。以下查询将向您显示检查约束的来源。

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'
© www.soinside.com 2019 - 2024. All rights reserved.