2009-04-29 97 views
3

我试图从存储过程中的dba_tab_cols视图中进行选择。它不工作,我不知道为什么。无法从存储过程(PL/SQL)中的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。两种情况下都使用相同的db用户。

dataType被声明为: dataType varchar2(128);

PL/SQL(Oracle 9)

有人知道这个问题吗?

回答

9

这很可能是一个特权问题。是否允许通过角色访问dba_tab_columns或者是否是直接选择授予您的用户? SPROCS中不提供通过角色授予的特权。

快速查看谷歌建议使用all_tab_cols来代替,并查看该表是否具有所需的信息。

+0

感谢,似乎工作!我找不到Google的答案:) – 2009-04-29 18:39:16

-1

我没有安装oracle,但可能dataType是一个保留字。我会尝试别的。

4

为了增加约恩的回答是:

对于大多数人来说,它是作为一个 惊喜的是,用户不能从过程中选择 的表,如果 他并没有被正确直接授予选择 (而不是通过 作用)

如果表用户尝试编译这个 过程中,他得到一个ORA-00942 虽然这个表确实存在 和他被授予选择 此表的权利。问题在于 程序不尊重角色;只有 直接授予的权利受到尊重。 所以,这意味着表的所有者具有 重新批责权:

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

+0

谢谢,那个链接非常有帮助。 – 2009-04-30 14:03:36