无法从存储过程(PL/SQL)内的dba\u tab\u cols中选择

无法从存储过程(PL/SQL)内的dba\u tab\u cols中选择,sql,oracle,stored-procedures,oracle9i,ora-00942,Sql,Oracle,Stored Procedures,Oracle9i,Ora 00942,我试图从存储过程中的dba_选项卡_cols视图中进行选择。它不起作用,我不知道为什么 如果我将以下SQL作为查询执行: SELECT t.data_type FROM dba_tab_cols t WHERE t.table_name = 'ACCOUNTTYPE' AND t.column_name = 'ACCESSEDBY'; 它很好用。但是,如果我将其复制到存储过程中,如下所示: SELECT t.data_type INTO dataType FROM dba_

我试图从存储过程中的dba_选项卡_cols视图中进行选择。它不起作用,我不知道为什么

如果我将以下SQL作为查询执行:

SELECT t.data_type FROM dba_tab_cols t
WHERE 
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';
它很好用。但是,如果我将其复制到存储过程中,如下所示:

SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';
我得到错误消息PL/SQL:ORA-00942:表或视图不存在,编辑器在尝试编译时高亮显示dba\u tab\u cols。在这两种情况下使用相同的db用户

数据类型声明为: 数据类型varchar2128

PL/SQL Oracle 9


有人知道这个问题吗?

我没有安装oracle,但数据类型可能是一个保留字。我想试试别的。

很可能是隐私问题。是通过角色访问dba_tab_列的权限,还是授予用户直接选择权限?通过角色授予的特权在存储过程中不可用


快速浏览一下谷歌,建议使用所有标签,看看该表格是否包含您需要的信息。

要添加到Eoin的答案中:

对大多数人来说,这是一个好消息 令人惊讶的是,用户无法选择 在以下情况下,从程序中删除表格: 他还没有被授予选择权 直接对,而不是通过 角色

如果表用户试图编译此 程序,他得到一个ORA-00942 虽然这张桌子确实存在 他被授予选择权 这张桌子。问题是 程序不尊重角色;只有 直接授予的权利得到尊重。 所以,这意味着表所有者必须 重新规划选择权:


谢谢,这似乎有效!我在谷歌上找不到答案:谢谢,这个链接非常有用。