防止Oracle中的Drop View

问题描述 投票:0回答:1

如何阻止用户不放弃视图,即使他/她有这样的优势?我有一个应用程序使用的视图。但是,它被用户丢弃了几次。有什么像REVOKE DROP ANY VIEW?我必须使用触发器吗?

sql oracle view
1个回答
2
投票

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

首先,要删除一些对象:

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>
© www.soinside.com 2019 - 2024. All rights reserved.