用户有足够权限,dba_视图怎么样在非系统用户的过程里面使用,我试了,语句,匿名块都可以,就是过程不行!请高手帮忙!!!

解决方案 »

  1.   

    语句,匿名块你是用plsql developer跑的?oracle的存储过程里面权限管理比sql要严格
      

  2.   

    用sys登陆,然后给你的用户赋予权限:grant all on dba_**  to  user_name.其中dba_**是你享用的视图,user_name是你创建过程的用户!下面给出我的例子:我用的是scott用户,执行:
    grant all  on dba_tables to scott;
    下面创建过程:
    CREATE OR REPLACE PROCEDURE prc_testdba  IS
      v_name VARCHAR2(20);
    BEGIN
      SELECT table_name
      INTO v_name
      FROM dba_tables
      WHERE owner = 'SCOTT'
      AND table_name = 'HOSPITAL';
      dbms_output.put_line(v_name);
    END prc_testdba;--之后我执行:
    set serveroutput on ;
    exec prc_testDBA;
    ---得到的结果是:
    屏幕输出:
    HOSPITAL
      

  3.   

    把你查询的语句和过程里的语句发出来看看
    确认用的是同一个用户,并且有dba权限
    匿名块也是一个过程
    是否你用了不具备dba权限的用户来执行这个过程,因此失败
      

  4.   

    必须显式授权。
    grant all on dba_**  to  user_name即可。