首页 > 解决方案 > 在 Oracle 中防止删除视图

问题描述

即使他/她有特权这样做,如何防止用户不放弃视图?我有一个应用程序正在使用的视图。但是,它被用户丢弃了几次。有没有像 REVOKE DROP ANY VIEW 这样的东西?我必须为此使用触发器吗?

标签: sqloracleview

解决方案


触发器可能会有所帮助。这是一个例子。

首先,要删除的一些对象:

SQL> create table test as select * From emp where 1 = 2;

Table created.

SQL> create or replace view v_dept as select * From dept;

View created.

SQL>

我不想让 V_DEPT 被丢弃,所以:

SQL> create or replace trigger trg_drop
  2    before drop on schema
  3  declare
  4    l_name varchar2(30);
  5  begin
  6    select ora_dict_obj_name
  7      into l_name
  8      from dual;
  9    if l_name = 'V_DEPT' then
 10       raise_application_error(-20001, 'Forbidden');
 11    end if;
 12  end;
 13  /

Trigger created.

测试:

SQL> drop view v_dept;
drop view v_dept
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Forbidden
ORA-06512: at line 8


SQL> drop table test;

Table dropped.

SQL>

推荐阅读