用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
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
确认用的是同一个用户,并且有dba权限
匿名块也是一个过程
是否你用了不具备dba权限的用户来执行这个过程,因此失败
grant all on dba_** to user_name即可。