获取触发器信息

说明

最近在做数据资产管理平台,需要连接数据源获取元数据信息,触发器是其中的1种数据信息,现在把几类不同的数据库,通过SQL获取的方式整理出来。

MySQL

查询SQL

SHOW TRIGGERS

说明

字段名 解释
Trigger 触发器名称
Event 触发事件
Table 触发器是建立在哪张表上的
Statement 触发时执行的SQL
Timing 触发时机

查询结果展示

在这里插入图片描述

SQL Server

用于测试获取的环境是SQL Server 2017

查询SQL

select triggers.name   as [trigger_name],
       tables.name     as [table_name],
       triggers.is_disabled,
       case
         when triggers.is_instead_of_trigger = 1 then 'INSTEAD OF'
         when triggers.is_instead_of_trigger = 0 then 'AFTER'
         else null end as [is_instead_of_trigger],
       comments.text
from sys.triggers triggers
       inner join sys.tables tables on triggers.parent_id = tables.object_id,
     syscomments comments
where triggers.type = 'TR'
  and triggers.object_id = comments.id

说明

字段名 解释
trigger_name 触发器名称
table_name 触发器是建立在哪张表上的
syscomments.text 触发器SQL
is_instead_of_trigger 触发器类型

syscomments表下的text保存创建触发器的SQL,sys.triggers表保存着触发器的一些基本信息

Oralce

查询SQL

select * from user_triggers

说明

字段名 解释
TRIGGER_NAME 触发器名称
TABLE_NAME 触发器是建立在哪张表上的
TRIGGER_BODY 触发器主体
TRIGGER_TYPE 触发器类型
TRIGGERING_EVENT 触发事件

查询结果展示

获取触发器信息_第1张图片

PostgreSQL

查询SQL

select tgname, pg_class.relname table_name, pg_proc.proname, n.nspname, pg_proc.prosrc tgbody, pg_trigger.tgtype
from (pg_trigger join pg_class on tgrelid = pg_class.oid)
       join pg_proc on tgfoid = pg_proc.oid
       join pg_namespace n on pg_class.relnamespace = n.oid

说明

字段名 解释
tgname 触发器名称
table_name 触发器是建立在哪张表上的
proname 调用函数名称
nspname 模式名称
tgbody 触发器主体
tgtype 触发器类型

tgtype看结果应该是触发器类型的code,不知道它的中文值是什么,没了解清楚PG的字典表是哪个。还有触发器也查着。

查询结果示例

PostgreSQL触发器查询结果

你可能感兴趣的:(数据库,获取触发器信息)