我正在尝试从存储过程中的dba_tab_cols视图中进行SELECT。它不起作用,我不知道为什么。

如果我执行以下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)

有人知道这个问题吗?

有帮助吗?

解决方案

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

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

其他提示

添加到Eoin的答案:

  

对于大多数人来说,它来自一个   用户无法选择的惊喜   来自程序内的表格if   他没有被授予选择权   直接(而不是通过   角色)

     

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top