无法从存储过程(PL/SQL)中的 dba_tab_cols 中进行选择

发布于 2024-07-18 04:25:55 字数 613 浏览 8 评论 0原文

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

数据类型声明为: 数据类型 varchar2(128);

PL/SQL (Oracle 9)

有人知道这个问题吗?

I'm trying to SELECT from the dba_tab_cols view from within a stored procedure. It's not working and I don't know why.

If I execute the following SQL as a query:

SELECT t.data_type FROM dba_tab_cols t
WHERE 
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

it works fine. However if I copy it into a stored procedure like so:

SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

I get the error message "PL/SQL: ORA-00942: table or view does not exist" and the editor highlights dba_tab_cols while trying to compile. The same db user is being used in both cases.

dataType is declared as:
dataType varchar2(128);

PL/SQL (Oracle 9)

Anybody know the issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一城柳絮吹成雪 2024-07-25 04:25:55

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

快速浏览一下 google,建议使用 all_tab_cols 代替,看看该表是否包含您需要的信息。

It's most likely a priviledges issue. Is the permission to access dba_tab_columns via a role or is it a direct select grant to your user? Priviledges granted via Roles aren't available in SPROCS.

A quick look on google suggests using all_tab_cols instead and seeing if that table has the required info you need.

遗失的美好 2024-07-25 04:25:55

添加到 Eoin 的答案:

对于大多数人来说,它是
令人惊讶的是用户无法选择
过程中的表 if
他没有被授予选择权
直接向右(而不是通过
角色)

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

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

To add to Eoin's answer:

For most people, it comes as a
surprise that the user cannot select
the table from within a procedure if
he has not been granted the select
right directly (as opposed to through
the role)

If table user tries to compile this
procedure, he gets a ORA-00942
although this table certainly exists
and he was granted the right to select
this table. The problem is that
procedures don't respect roles; only
directly granted rights are respected.
So, that means that table owner has to
regrant the right to select:

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

烟酒忠诚 2024-07-25 04:25:55

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

I don't have oracle installed, but perhaps dataType is a reserved word. I'd try something else.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文