Oracle - 在编译期间检查权限

时间:2015-03-10 09:26:20

标签: oracle plsql

使用以下方法编译视图时

ALTER VIEW schema.vwName COMPILE;

我得到了“执行成功”#39;但是,当我尝试从视图中选择数据时,我收到错误:' ORA-01031:权限不足'。我理解错误消息及其原因(架构没有选择另一个架构中的表的权限)。我想知道是否有办法在视图编译期间获取有关此类错误的信息,或者可能还有其他命令要检查它而不从视图中选择数据?

我正在更改数据库中的权限,我想确保所有视图和过程都正常,用户在选择或执行期间不会收到错误ORA-01031。

由于

1 个答案:

答案 0 :(得分:1)

我认为您可能使用force关键字创建了视图,但是由于缺少对象或特权而导致编译错误。例如:

# shema1
create table test_table ( column1 varchar2(10));

grant select on test_table to shema2;

#shema2
create or replace view test_view as select column1 from shema1.test_table; --works/no error

# shema1
revoke select on test_table from shema2;

# shema2
alter view test_view compile; --Gives ORA-00941: Table or view does not exist

create or replace force view test_view as select column1 from shema1.test_table; --gives no error, due to force keyword

alter view test_view compile; --gives no error, due to force keyword

或反过来说:如果你想通过编译检查你的观点,你可能不会在视图定义中使用force

<强> FORCE 如果要创建视图,请指定FORCE,无论视图的基表或引用的对象类型是否存在,或者包含该视图的模式的所有者是否具有对它们的特权。在对视图发出任何SELECT,INSERT,UPDATE或DELETE语句之前,这些条件必须为true。

docs.oracle