如何使用低权限的 PL-SQL 获取 Oracle 中的列数据类型?
我对 Oracle 数据库中的一些表具有“只读”访问权限。我需要获取某些列的架构信息。我想使用类似于 MS SQL 的 sp_help
的东西。
我看到此查询中列出了我感兴趣的表:
SELECT * FROM ALL_TABLES
当我运行此查询时,Oracle 告诉我“在架构中找不到表”,是的,参数是正确的。
SELECT
DBMS_METADATA.GET_DDL('TABLE', 'ITEM_COMMIT_AGG', 'INTAMPS') AS DDL
FROM DUAL;
使用我的 Oracle 通用翻译器 9000 后,我猜测这不起作用,因为我没有足够的权限。考虑到我的限制,如何获取我可以使用 PL-SQL 语句读取访问的表上列的数据类型和数据长度?
I have "read only" access to a few tables in an Oracle database. I need to get schema information on some of the columns. I'd like to use something analogous to MS SQL's sp_help
.
I see the table I'm interested in listed in this query:
SELECT * FROM ALL_TABLES
When I run this query, Oracle tells me "table not found in schema", and yes the parameters are correct.
SELECT
DBMS_METADATA.GET_DDL('TABLE', 'ITEM_COMMIT_AGG', 'INTAMPS') AS DDL
FROM DUAL;
After using my Oracle universal translator 9000 I've surmised this doesn't work because I don't have sufficient privileges. Given my constraints how can I get the datatype and data length of a column on a table I have read access to with a PL-SQL statement?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
ALL_TAB_COLUMNS
应该可以从 PL/SQL 进行查询。DESC
是一个 SQL*Plus 命令。ALL_TAB_COLUMNS
should be queryable from PL/SQL.DESC
is a SQL*Plus command.您可以使用
desc
命令。这将为您提供列名、null 是否有效以及数据类型(以及长度,如果适用)
You can use the
desc
command.This will give you the column names, whether null is valid, and the datatype (and length if applicable)
我为这种情况找到的最佳解决方案是
@Aaron Stainback,谢谢您的纠正!
The best solution that I've found for such case is
@Aaron Stainback, thank you for correction!
注意:如果您尝试使用 all_tab_columns 视图获取位于不同 SCHEMA 中的表的此信息,我们会遇到此问题,因为我们的应用程序出于安全目的使用不同的 SCHEMA。
使用以下内容:
EG:
Note: if you are trying to get this information for tables that are in a different SCHEMA use the all_tab_columns view, we have this problem as our Applications use a different SCHEMA for security purposes.
use the following:
EG:
Oracle 11.2:获取表中完整数据类型的列表:
打印:
屏幕截图:
文档:
https://docs.oracle.com/cd/ B19306_01/server.102/b14237/statviews_4462.htm#REFRN26277
Oracle 11.2: Get a list of the full datatype in your table:
Prints:
Screenshot:
Documentation:
https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_4462.htm#REFRN26277
快速而肮脏的方式(例如,查看数据如何存储在oracle中)
将显示表sys.dual中的虚拟列有typ = 1(varchar2),而10是Typ = 2(数字)。
Quick and dirty way (e.g. to see how data is stored in oracle)
will show that dummy column in table sys.dual has typ=1 (varchar2), while 10 is Typ=2 (number).
你可以试试这个。
You can try this.
要查看内部表示大小(以字节为单位),您可以使用:
To see the internal representation size in bytes you can use: