Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 过程不在sys.dba_策略上编译_Oracle_Procedure - Fatal编程技术网

Oracle 过程不在sys.dba_策略上编译

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

这可能是一个容易犯的错误,但我还是看不出来。 使用我的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.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_管理员;我仍然无法编译这个过程,我得到了一个错误。我很奇怪地尝试重新连接。只是尝试了同样的方法,没有问题:/