6

我正在尝试从存储过程中的 dba_tab_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_tab_cols。在这两种情况下都使用相同的数据库用户。

dataType 声明为:dataType varchar2(128);

PL/SQL (甲骨文 9)

有人知道这个问题吗?

4

3 回答 3

12

这很可能是特权问题。是通过角色访问权限dba_tab_columns 还是直接选择授予您的用户?通过角色授予的权限在 SPROCS 中不可用。

快速浏览一下谷歌建议使用all_tab_cols并查看该表是否具有您需要的所需信息。

于 2009-04-29T18:34:59.887 回答
4

要添加到 Eoin 的答案:

对于大多数人来说,如果没有直接授予用户选择权限(而不是通过角色),用户无法从过程中选择表,这让大多数人感到惊讶

如果表用户试图编译这个过程,他会得到一个 ORA-00942,尽管这个表确实存在并且他被授予选择这个表的权利。问题是程序不尊重角色;只有直接授予的权利才会受到尊重。因此,这意味着表所有者必须重新授予选择权:

http://www.adp-gmbh.ch/ora/err/ora_00942.html

于 2009-04-29T18:44:36.743 回答
-1

我没有安装 oracle,但也许 dataType 是保留字。我会尝试别的。

于 2009-04-29T18:30:10.100 回答