如何在 Oracle 中获取触发器的 user/creation 日期
How to get user/creation date of Trigger in Oracle
有什么办法可以得到触发器的创建日期(时间)吗?
我尝试了以下查询:
select CREATED from user_objects where object_name = '&MY_TRIGGER_NAME'
但我想,我得到的是最后一个 modification/run 日期,而不是创建时间。
另外,我想获取创建触发器的用户...如果可能的话。
user_objects 视图中有一个名为“created”的字段,它告诉对象的创建时间。还有另一个名为 last_ddl_time 的列,它将显示上次创建 DDL 的时间
至于创建对象的用户,我不确定它是否被跟踪,除非你有一个记录此信息的登录触发器,我相信
CREATED
是
timestamp for the creation of the object
在 USER_OBJECTS/ALL_OBJECTS/DBA_OBJECTS 而不是最后修改日期 LAST_DDL_TIME
.
要获取触发器所有者,您需要使用 ALL_TRIGGERS/DBA_TRIGGERS 中的 OWNER
列,因为 USER_TRIGGERS 仅显示您的 自己的 触发器而没有任何 OWNER列。
根据 oracle documentation,USER_OBJECTS
的字段描述为:
CREATED
: 创建对象的时间戳
LAST_DDL_TIME
:由 DDL 语句(包括授权和撤销)导致的对象的最后一次修改的时间戳
让我们做一个练习:
正在检查触发器 USER_OBJECTS
table TRG_T
SQL> SELECT OBJECT_NAME,
2 OBJECT_TYPE,
3 CREATED,
4 LAST_DDL_TIME
5 FROM USER_OBJECTS
6 WHERE OBJECT_NAME = 'TRG_T';
no rows selected
现在,让我们创建触发器TRG_T
SQL> CREATE OR REPLACE TRIGGER TRG_T BEFORE
2 INSERT ON T
3 FOR EACH ROW
4 BEGIN
5 NULL;
6 END;
7 /
Trigger created.
我们来看看 USER_OBJECTS
SQL> SELECT OBJECT_NAME,
2 OBJECT_TYPE,
3 CREATED,
4 LAST_DDL_TIME
5 FROM USER_OBJECTS
6 WHERE OBJECT_NAME = 'TRG_T';
OBJECT_NAME OBJECT_TYPE CREATED LAST_DDL_TIME
--------------- --------------- -------------------- --------------------
TRG_T TRIGGER 02-jul-2020 12:41:29 02-jul-2020 12:41:29
目前,CREATED
和 LAST_DDL_TIME
是相同的,因为对触发器的最后一个 DDL 操作是在我们创建它的时候。
让我们修改触发器:
SQL> CREATE OR REPLACE TRIGGER TRG_T BEFORE
2 INSERT ON T
3 FOR EACH ROW
4 BEGIN
5 NULL; -- do some changes
6 NULL; -- CHANGED THIS
7 END;
8 /
Trigger created.
现在,让我们再次检查 USER_OBJECTS
:
SQL> SELECT OBJECT_NAME,
2 OBJECT_TYPE,
3 CREATED,
4 LAST_DDL_TIME
5 FROM USER_OBJECTS
6 WHERE OBJECT_NAME = 'TRG_T';
OBJECT_NAME OBJECT_TYPE CREATED LAST_DDL_TIME
--------------- --------------- -------------------- --------------------
TRG_T TRIGGER 02-jul-2020 12:41:29 02-jul-2020 12:42:05
这里看到CREATED
和LAST_DDL_TIME
不一样
有什么办法可以得到触发器的创建日期(时间)吗?
我尝试了以下查询:
select CREATED from user_objects where object_name = '&MY_TRIGGER_NAME'
但我想,我得到的是最后一个 modification/run 日期,而不是创建时间。
另外,我想获取创建触发器的用户...如果可能的话。
user_objects 视图中有一个名为“created”的字段,它告诉对象的创建时间。还有另一个名为 last_ddl_time 的列,它将显示上次创建 DDL 的时间
至于创建对象的用户,我不确定它是否被跟踪,除非你有一个记录此信息的登录触发器,我相信
CREATED
是
timestamp for the creation of the object
在 USER_OBJECTS/ALL_OBJECTS/DBA_OBJECTS 而不是最后修改日期 LAST_DDL_TIME
.
要获取触发器所有者,您需要使用 ALL_TRIGGERS/DBA_TRIGGERS 中的 OWNER
列,因为 USER_TRIGGERS 仅显示您的 自己的 触发器而没有任何 OWNER列。
根据 oracle documentation,USER_OBJECTS
的字段描述为:
CREATED
: 创建对象的时间戳LAST_DDL_TIME
:由 DDL 语句(包括授权和撤销)导致的对象的最后一次修改的时间戳
让我们做一个练习:
正在检查触发器 USER_OBJECTS
table TRG_T
SQL> SELECT OBJECT_NAME,
2 OBJECT_TYPE,
3 CREATED,
4 LAST_DDL_TIME
5 FROM USER_OBJECTS
6 WHERE OBJECT_NAME = 'TRG_T';
no rows selected
现在,让我们创建触发器TRG_T
SQL> CREATE OR REPLACE TRIGGER TRG_T BEFORE
2 INSERT ON T
3 FOR EACH ROW
4 BEGIN
5 NULL;
6 END;
7 /
Trigger created.
我们来看看 USER_OBJECTS
SQL> SELECT OBJECT_NAME,
2 OBJECT_TYPE,
3 CREATED,
4 LAST_DDL_TIME
5 FROM USER_OBJECTS
6 WHERE OBJECT_NAME = 'TRG_T';
OBJECT_NAME OBJECT_TYPE CREATED LAST_DDL_TIME
--------------- --------------- -------------------- --------------------
TRG_T TRIGGER 02-jul-2020 12:41:29 02-jul-2020 12:41:29
目前,CREATED
和 LAST_DDL_TIME
是相同的,因为对触发器的最后一个 DDL 操作是在我们创建它的时候。
让我们修改触发器:
SQL> CREATE OR REPLACE TRIGGER TRG_T BEFORE
2 INSERT ON T
3 FOR EACH ROW
4 BEGIN
5 NULL; -- do some changes
6 NULL; -- CHANGED THIS
7 END;
8 /
Trigger created.
现在,让我们再次检查 USER_OBJECTS
:
SQL> SELECT OBJECT_NAME,
2 OBJECT_TYPE,
3 CREATED,
4 LAST_DDL_TIME
5 FROM USER_OBJECTS
6 WHERE OBJECT_NAME = 'TRG_T';
OBJECT_NAME OBJECT_TYPE CREATED LAST_DDL_TIME
--------------- --------------- -------------------- --------------------
TRG_T TRIGGER 02-jul-2020 12:41:29 02-jul-2020 12:42:05
这里看到CREATED
和LAST_DDL_TIME
不一样