Oracle 过程不在sys.dba_策略上编译
这可能是一个容易犯的错误,但我还是看不出来。 使用我的sec_管理模式,我可以运行以下操作:Oracle 过程不在sys.dba_策略上编译,oracle,procedure,Oracle,Procedure,这可能是一个容易犯的错误,但我还是看不出来。 使用我的sec_管理模式,我可以运行以下操作: SELECT count(*) FROM sys.dba_policies; 哪个输出1 现在,我想使用以下方法创建一个过程: create or replace PROCEDURE pr_add_policy_row IS num NUMBER := 0; BEGIN SELECT count(*) INTO num FROM sys
SELECT count(*) FROM sys.dba_policies;
哪个输出1
现在,我想使用以下方法创建一个过程:
create or replace PROCEDURE pr_add_policy_row
IS
num NUMBER := 0;
BEGIN
SELECT count(*)
INTO num
FROM sys.dba_policies;
END pr_add_policy_row;
但它给了我一个错误:
Error(6,7): PL/SQL: SQL Statement ignored
Error(8,18): PL/SQL: ORA-00942: table or view does not exist
我做错了什么
谢谢 要能够从过程中的表或视图中进行选择,需要使用select PRIVITE with grant选项。让DBA批准您
GRANT SELECT ON sys.dba_policies TO user3019499 WITH GRANT OPTION;
谢谢请问我们为什么要这样做?我想很简单地理解原因。使用“授予”选项意味着您可以将您的权限转发给其他用户。由于您可以使您的过程对其他用户执行,这些用户在sys.dba_策略上没有选择权限,因此这些其他用户可以间接地从您的表/视图中获取数据。因此,Oracle要求您在执行此操作之前拥有授予选项。非常有意义,非常清楚的解释,谢谢!DBA确实运行了:使用grant选项将sys.DBA_策略上的select授予sec_管理员;我仍然无法编译这个过程,我得到了一个错误。我很奇怪地尝试重新连接。只是尝试了同样的方法,没有问题:/