Printing 如何打印firebird触发器?

Printing 如何打印firebird触发器?,printing,triggers,firebird,Printing,Triggers,Firebird,我想打印firebird数据库中所有触发器的内容 我有一个firebird数据库,有20个字段和56个触发器,每个触发器大约有10到20行sql代码。是否有任何gui软件能够做到这一点,或者sql命令能够选择所有触发器,然后将其导出为txt文件?使用IBExpert工具菜单,“提取元数据”:仅提取触发器,并将结果文件保存到*.txt或*sql。此处描述: 或者使用IBExpert工具菜单“生成HTML文档”:仅为触发器生成。这将提供一个HTML结果。此处描述:可以从RDB$triggers表中找

我想打印firebird数据库中所有触发器的内容


我有一个firebird数据库,有20个字段和56个触发器,每个触发器大约有10到20行sql代码。是否有任何gui软件能够做到这一点,或者sql命令能够选择所有触发器,然后将其导出为txt文件?

使用IBExpert工具菜单,“提取元数据”:仅提取触发器,并将结果文件保存到*.txt或*sql。此处描述:


或者使用IBExpert工具菜单“生成HTML文档”:仅为触发器生成。这将提供一个HTML结果。此处描述:

可以从RDB$triggers表中找到所有触发器

您可以使用此SQL查询获取有关触发器的信息:

SELECT RDB$TRIGGER_NAME AS trigger_name,
       RDB$RELATION_NAME AS table_name,
       RDB$TRIGGER_SOURCE AS trigger_body,
       CASE RDB$TRIGGER_TYPE
        WHEN 1 THEN 'BEFORE'
        WHEN 2 THEN 'AFTER'
        WHEN 3 THEN 'BEFORE'
        WHEN 4 THEN 'AFTER'
        WHEN 5 THEN 'BEFORE'
        WHEN 6 THEN 'AFTER'
       END AS trigger_type,
       CASE RDB$TRIGGER_TYPE
        WHEN 1 THEN 'INSERT'
        WHEN 2 THEN 'INSERT'
        WHEN 3 THEN 'UPDATE'
        WHEN 4 THEN 'UPDATE'
        WHEN 5 THEN 'DELETE'
        WHEN 6 THEN 'DELETE'
       END AS trigger_event,
       CASE RDB$TRIGGER_INACTIVE
        WHEN 1 THEN 0 ELSE 1
       END AS trigger_enabled,
       RDB$DESCRIPTION AS trigger_comment
  FROM RDB$TRIGGERS

您可以使用isql执行“显示触发器”,然后对每个触发器执行“显示触发器”


或者只需在文件中执行第一步,对其进行编辑并通过isql运行即可创建如下视图:

create view TriggerSourceView
as
select
    trim(RDB$RELATION_NAME) as tableName,
    trim(RDB$TRIGGER_NAME) as triggerName,
    'create or alter trigger ' || trim(RDB$TRIGGER_NAME) || case RDB$TRIGGER_INACTIVE when 1 then ' inactive ' else ' active ' end ||
    case RDB$TRIGGER_TYPE
        when 1 then  'before insert'
        when 2 then  'after insert'
        when 3 then  'before update'
        when 4 then  'after update'
        when 5 then  'before delete'
        when 6 then  'after delete'
        when 17 then  'before insert or update'
        when 18 then  'after insert or update'
        when 25 then  'before insert or delete'
        when 26 then  'after insert or delete'
        when 27 then  'before update or delete'
        when 28 then  'after update or delete'
        when 113 then  'before insert or update or delete'
        when 114 then  'after insert or update or delete'
        when 8192 then  'on connect'
        when 8193 then  'on disconnect'
        when 8194 then  'on transaction start'
        when 8195 then  'on transaction commit'
        when 8196 then  'on transaction rollback'
    end || ' position ' || RDB$TRIGGER_SEQUENCE || ' on ' || trim(RDB$RELATION_NAME) || ' ' || RDB$TRIGGER_SOURCE as source
from RDB$TRIGGERS where RDB$TRIGGER_SOURCE is not null;
然后像这样使用它:

select * from TriggerSourceView where tableName = 'MyTable'

我在使用Intellij Idea时使用它,因为它不支持Firebird。

非常有效,谢谢。它与您链接的源中给出的查询不同,该查询在末尾有一行附加行,因此无法工作。源中的where语句只能获取一个特定触发器。最初的问题是关于打印所有触发器。好的,我错过了。