我正在尝试从存储过程中的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)
有人知道这个问题吗?
答案 0 :(得分:11)
这很可能是特权问题。是通过角色访问dba_tab_columns
的权限还是直接选择授予您的用户?通过角色授予的特权在SPROCS中不可用。
快速查看谷歌建议使用all_tab_cols
,并查看该表是否具有您需要的所需信息。
答案 1 :(得分:4)
添加到Eoin的答案:
对于大多数人来说,它来自一个 用户无法选择的惊喜 来自程序内的表格if 他没有被授予选择权 直接(而不是通过 角色)
如果表用户尝试编译它 程序,他得到一个ORA-00942 虽然这个表肯定存在 他被授予选择权 这张桌子。问题是 程序不尊重角色;只要 直接授予权利受到尊重。 所以,这意味着表所有者必须 重新选择权利:
答案 2 :(得分:-1)
我没有安装oracle,但是dataType可能是一个保留字。我会尝试其他的东西。