【问题标题】:How to create Triggers on oracle indexes如何在 oracle 索引上创建触发器
【发布时间】:2021-04-05 08:33:37
【问题描述】:

为了更清楚 我想创建一个触发器,每次在我的架构中创建新索引时触发 然后将该索引名称保存在单独的表中,我们称之为 index_log。

在index_log表中,有一个creation_time列,告诉了该索引的创建时间

【问题讨论】:

    标签: oracle indexing triggers


    【解决方案1】:

    如果您只需要获取索引名称和创建时间,那么您不需要任何触发器,如@Littlefoot 所示。

    否则你可以创建一个DDL-Trigger:

    CREATE OR REPLACE TRIGGER audit_index 
       AFTER CREATE ON hr.SCHEMA 
       WHEN (ora_dict_obj_type = 'INDEX')
    BEGIN
       DBMS_OUTPUT.PUT_LINE('Index Name: ' || ora_dict_obj_name);
    END;
    /
    

    您应该查看Triggers for Publishing Events 以从触发事件中获取所需信息。

    【讨论】:

      【解决方案2】:

      重新发明轮子,是吗?该信息存储在USER_OBJECTS,建议您使用。

      信息:

      SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
      
      Session altered.
      
      SQL> select sysdate from dual;
      
      SYSDATE
      -------------------
      28.12.2020 16:20:11
      

      表:

      SQL> create table test (id number);
      
      Table created.
      

      索引:

      SQL> create index i1t on test (id);
      
      Index created.
      

      它是什么时候创建的?

      SQL> select created from user_objects where object_name = 'I1T';
      
      CREATED
      -------------------
      28.12.2020 16:20:20
      
      SQL>
      

      【讨论】:

      • 我正在为学校作业做这个,我的老师希望我为他重新发明轮子。这就是为什么我首先遇到麻烦,就像我可以使用您提到的方式获取该信息时为什么要为索引创建单独的日志表一样。但我必须使用触发器来做到这一点,我希望你能帮助我。
      • 你应该这么说的。无论如何,Wernfried 已经回答了你的问题 - 我希望现在就完成了。
      猜你喜欢
      • 2016-05-31
      • 2012-03-22
      • 2018-11-03
      • 1970-01-01
      • 2013-12-24
      • 2018-02-07
      • 1970-01-01
      • 2011-06-21
      • 2011-01-06
      相关资源
      最近更新 更多