无法从存储过程(PL/SQL)中的 dba_tab_cols 中进行选择
我正在尝试从存储过程中的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这很可能是权限问题。 访问
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.添加到 Eoin 的答案:
http://www.adp-gmbh.ch/ ora/err/ora_00942.html
To add to Eoin's answer:
http://www.adp-gmbh.ch/ora/err/ora_00942.html
我没有安装 oracle,但 dataType 可能是保留字。 我会尝试别的东西。
I don't have oracle installed, but perhaps dataType is a reserved word. I'd try something else.