You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle DDL触发器阻止删表失效,测试报错求解决方案

问题解决方法

你遇到的问题主要有两个核心点,对应解决方式如下:

1. 修正触发器逻辑(可选但更严谨)

当前触发器会拦截所有DROP操作(比如删除视图、序列也会触发),如果只想阻止删除表的操作,需要添加对象类型判断:

CREATE OR REPLACE TRIGGER Exercitiul12
BEFORE DROP ON SCHEMA
WHEN (ORA_DICT_OBJ_TYPE = 'TABLE') -- 仅针对表的删除操作触发
BEGIN
    RAISE_APPLICATION_ERROR(-20001, 'Nu puteti sterge tabelul ' || ORA_DICT_OBJ_NAME);
END;
/

2. 修正测试代码的执行方式

DDL语句不能直接嵌入PL/SQL块中执行,你有两种正确的测试方式:

  • 方式一:直接执行删除语句,不需要包裹PL/SQL块
DROP TABLE Restaurant;
  • 方式二:如果一定要用PL/SQL块,必须使用动态SQL
BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE Restaurant';
END;
/

按上述方式调整后,触发器会正常触发并抛出你定义的错误,阻止表被删除。

内容的提问来源于stack exchange,提问作者Eclipsa2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:40:32