为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:linux
【CPU】:intel i5
【问题描述】*:
需求:需要获取触发器的相关信息,例如是否为行级触发器、when子句是什么、被引用的old字段名称是什么,new字段名称是什么等等。
关于触发器元数据的疑问,触发器相关的信息都存储在了TRIGGERS表中了吗,像when子句、引用值old和new这种信息好像没有,只能自己解析body中的内容获取吗?
"引用值old和new"是指触发器对NEW和OLD的别名设置信息么?WHEN子句估计得到脚本里去解析了,或者达梦还有系统函数未放出来
你测试一下下面这个SQL
SELECT TAB.ID
,TRG.ID
,TAB.NAME AS TABLE_NAME
,TRG.NAME AS TRIGGER_NAME
,CASE WHEN ((TRG.INFO1 / 4) & 0X03) = 0X00 THEN 'BEFORE '
WHEN ((TRG.INFO1 / 4) & 0X03) = 0X01 THEN 'AFTER '
WHEN ((TRG.INFO1 / 4) & 0X03) = 0X02 THEN 'INSTEAD OF '
ELSE 'UNKNOW'
END AS BEFOR_OR_AFTER_OR_INSTEAD
,CASE WHEN (TRG.INFO1 & 0X02) <> 0
THEN (CASE WHEN ((TRG.INFO1 /64) & 0X01) = 0X01 THEN 'ROW'
WHEN ((TRG.INFO1 /64) & 0X01) = 0X00 THEN 'STMT'
ELSE ' '
END)
ELSE 'EVENT'
END AS ROW_OR_STATEMENT
,SF_GET_TRI_EVENT_FROM_INFO3(TRG.INFO3, TRG.INFO1) AS TRIGGERING_EVENT
,TRIG_GET_IS_INSERT_FROM_INFO3(TRG.INFO3) AS TRIGGERING_EVENT_IS_INSERT
,TRIG_GET_IS_DELETE_FROM_INFO3(TRG.INFO3) AS TRIGGERING_EVENT_IS_DELETE
,TRIG_GET_IS_UPDATE_FROM_INFO3(TRG.INFO3) AS TRIGGERING_EVENT_IS_UPDATE
,TRIG_GET_NEW_ROW_NAME(TRG.ID) AS NEW_ROW_NAME
,TRIG_GET_OLD_ROW_NAME(TRG.ID) AS OLD_ROW_NAME
,TRIG_GET_TAB_OR_COL_LEVEL_FROM_INFO3(TRG.INFO3) AS TAB_OR_COL_LEVEL
,TXT.TXT
FROM SYSOBJECTS TRG
,SYSOBJECTS TAB
,SYS.SYSTEXTS TXT
WHERE TRG.PID = TAB.ID
AND TXT.ID = TRG.ID
AND TRG.SUBTYPE$ = 'TRIG'
达梦应该是存在了SYSOBJECTS表中