首页 > 解决方案 > 在删除表之前无法触发 DDL 触发器

问题描述

我想创建一个触发器,该触发器在删除 oracle live sql 中的表时引发错误。在我的代码中,触发器已成功创建,但在尝试删除表时出现不同的错误,即显示遇到符号“Drop”

代码:

CREATE OR REPLACE TRIGGER drop_trigger  
   BEFORE DROP ON SCHEMA
   BEGIN 
      RAISE_APPLICATION_ERROR (-20000,'Cannot drop the table'); 
   END; 
 
  drop table emp;

错误:

Errors: TRIGGER DROP_TRIGGER
Line/Col: 5/3 PLS-00103: Encountered the symbol "DROP" 

还尝试将“BEFORE DROP ON SCHEMA”行替换为“BEFORE DROP ON DATABASE”

并且出现了新错误,即“ORA-01031:权限不足”

代码在 Oracle Live Sql 上执行

标签: oracleplsqltriggers

解决方案


您的代码是正确的,但这只是 2 条语句。所以这是一个问题,语句如何在 Oracle Live Sql 中运行。尝试单独执行每个语句。

您的用户需要 CREATE TRIGGER 系统权限。请参考 oracle 文档。


推荐阅读