oracle 中如何删除或修改 触发器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中如何删除或修改 触发器?相关的知识,希望对你有一定的参考价值。

参考技术A 禁用和启用触发器
alter trigger <trigger_name> disable;
alter trigger <trigger_name> enable;本回答被提问者采纳

Oracle 中的删除分区触发器

【中文标题】Oracle 中的删除分区触发器【英文标题】:Drop partition trigger in Oracle 【发布时间】:2018-11-02 11:32:30 【问题描述】:

我们如何在 Oracle 中创建删除分区 DDL 触发器。 例如 假设我们创建 DDL 触发器来捕获或防止有人在我们的模式中触发 drop TABLE/INDEX 或其他内容。 创建或替换触发器 my_trg 在架构上 DROP 之后

我们可以对删除分区做同样的事情吗?

我们可以存储详细信息吗?就像这个分区被这个特定的用户删除了一样。

我们能否通过触发器阻止用户删除分区或捕获哪个用户删除了分区

【问题讨论】:

【参考方案1】:

触发器是这个:

CREATE OR REPLACE TRIGGER LOG_ALTER
    BEFORE ALTER ON SCHEMA
    WHEN (ora_dict_obj_type = 'TABLE' AND ora_dict_obj_name = 'YOUR_TABLE')
DECLARE

    sqlcmd T_USER_LOGGING.ULOG_SQL_CMD%TYPE;
    sql_text ora_name_list_t;
    n NUMBER;

BEGIN

    n := ora_sql_txt(sql_text);
    IF n IS NOT NULL THEN
        FOR i IN 1..n LOOP
            sqlcmd := sqlcmd || sql_text(i);
        END LOOP;
    END IF;

    IF REGEXP_LIKE(sqlcmd, 'DROP\s+PARTITION', 'i') THEN
        RAISE_APPLICATION_ERROR(-20010, 'User '||ora_login_user||' must not drop partition from table YOUR_TABLE');
    END IF;     

END;
/

但请注意,具有ADMINISTER DATABASE TRIGGER 系统权限的用户无论如何都可以删除分区,因为他忽略了RAISE_APPLICATION_ERROR

【讨论】:

非常感谢。还有一件事,如果我们想存储哪个分区被哪个用户删除了,我们该怎么办? 你必须解析cmd字符串

以上是关于oracle 中如何删除或修改 触发器?的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库数据删除后如何恢复?

本地Oracle数据库中我对数据进行了改变,比如删除,添加等。如何将修改的数据更新到服务器上的数据库中

oracle删除关联表的数据,如何删除啊!下面是我写的SQL,不知道哪里出问题了,就是运行不了!

Oracle中如何将自动增量添加到现有表中

插入或删除后的 Oracle 触发器

在Sql Server、MySql、Oracle中如何删除视图;如何执行视图