plsql过程:无法从dba_表中获取pctfree和ini_trans值

plsql过程:无法从dba_表中获取pctfree和ini_trans值,plsql,oracle11g,Plsql,Oracle11g,在oracle中,我以系统用户身份登录,并使用sql developer 我想访问特定表的dba_表中的pct_自由值和ini_trans值 plsql代码过程编写为(简单版本程序): 上面的代码给了我编译错误,例如忽略语句(对于“SELECT”),begin语句中('pct'附近缺少表达式) 如果我作为普通的sql查询运行,它会返回我的值,但为什么在plsql的情况下这不起作用呢 我使用oracle blackbook作为参考。我很确定这是角色授予的特权。请参阅以获取解释。过程不会继承角色授予

在oracle中,我以系统用户身份登录,并使用sql developer

我想访问特定表的dba_表中的pct_自由值和ini_trans值

plsql代码过程编写为(简单版本程序):

上面的代码给了我编译错误,例如忽略语句(对于“SELECT”),begin语句中('pct'附近缺少表达式)

如果我作为普通的sql查询运行,它会返回我的值,但为什么在plsql的情况下这不起作用呢


我使用oracle blackbook作为参考。

我很确定这是角色授予的特权。请参阅以获取解释。过程不会继承角色授予的特权。不,THJ不会有问题,因为dba_表可以通过简单的查询访问。为什么它会导致plsql出现问题。此外,我是以系统用户身份登录的。如果在执行查询之前指定了
SET ROLE NONE
,查询是否有效?还有,您到底得到了什么精确的编译错误?我得到的错误类似于:error(6,3)SQL语句被忽略。错误(6,35)缺少表达式。
CREATE OR REPLACE PROCEDURE findattributes(tablename in varchar2) IS
  pct dba_tables.pct_free%type;
  initrans dba_tables.ini_trans%type;
BEGIN
  SELECT PCT_FREE, INI_TRANS INTO pct, initrans FROM dba_tables WHERE TABLE_NAME = 'EMP';
END;