sql—如何在oracle中获取触发器的用户/创建日期

w41d8nur  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(1275)

有没有办法得到触发器的创建日期(时间)?
我尝试了以下查询:

select CREATED from user_objects where object_name = '&MY_TRIGGER_NAME'

但我想,我得到的是最后一次修改/运行日期,而不是创建时间。
而且,我想得到创建触发器的用户…如果可能的话。

gr8qqesn

gr8qqesn1#

根据oracle文档 USER_OBJECTS 描述如下: CREATED :创建对象的时间戳 LAST_DDL_TIME :由ddl语句(包括授权和撤销)导致的对象最后一次修改的时间戳
让我们做一个练习:
办理登机手续 USER_OBJECTS 触发器表 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` 这里不一样
t3psigkw

t3psigkw2#

在user\u objects视图中有一个名为“created”的字段,它告诉对象的创建时间。还有一个名为last_ddl_time的列,它将显示上次创建ddl的时间
至于创建这个对象的用户,我不确定它是否被跟踪,除非你有一个登录触发器来记录这个信息

js81xvg6

js81xvg63#

CREATED
创建对象的时间戳
在user\u objects/all\u objects/dba\u objects中,而不是上次修改的日期 LAST_DDL_TIME .
要获得触发器所有者,您需要使用 OWNER 列,因为user\u triggers只显示您自己的触发器,而不显示任何所有者列。

相关问题