oracle - 如何在不使用 DESCRIBE 命令的情况下描述 Oracle 中的表?

标签 oracle oracle11g sql-scripts data-dictionary

我在上一门课时遇到了困难。我们需要编写一个与 DESCRIBE 命令类似的 Oracle 脚本。我们正在使用的这本书描述了如何非常糟糕地使用数据字典。不是在寻找答案,而是在正确的方向上寻找一个点。

最佳答案

您正在寻找 USER_TAB_COLUMNS - 所有列及其在执行查询的架构中的描述 - 或 ALL_TAB_COLUMNS - 除了用户有权查看的所有表外,相同。

一个典型的查询可能是:

select *
  from user_tab_columns
 where table_name = 'MY_TABLE'
 order by column_id
column_id是表中列的“顺序”。

您应该确保 'MY_TABLE' 大写,除非您一直在添加带有大小写的表格(一个坏主意),在这种情况下您需要使用类似 = "MyTable" 的内容。 .

具体desc等价于我从 ss64 中窃取的以下内容,一个很好的 Oracle 资源:
select column_name as "Name"
     , nullable as "Null?"
     , concat(concat(concat(data_type,'('),data_length),')') as "Type"
  from user_tab_columns
 where table_name = 'MY_TABLE';

您可以通过 select * from dictionary 找到所有此类 View 。 ,这是 data dictionary 的顶层或查看 documentation .

还有DBA_TAB_COLUMNS ,与 ALL_TAB_COLUMNS 相同,但对于数据库中的每个表。这假定您具有查看它和表的权限。如果您无权访问此表,您需要让您的 DBA 授予您 SELECT ANY DICTIONARY特权。

关于oracle - 如何在不使用 DESCRIBE 命令的情况下描述 Oracle 中的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855209/

相关文章:

C# Log4Net 和 Oracle 11g

sql - object_id() 与 sys.objects

sql - 如何管理包含大量插入和选择的大表?

oracle - GRANT SELECT 在更改后的 session 中不起作用

oracle - PL/SQL 检查 SYS_REFCURSOR 的大小

Oracle 11g XE - 突然出现 ORA-01034 : ORACLE not available and ORA-27101: shared memory realm does not exist

sql-server - 如何从 Delphi 中执行包含许多 GO 语句的大型 SQL 脚本?

mysql - 如何选择在两列中具有相同值集的行,从而连接第三列中的值?

java - 使用 Java 创建到 oracle db 的 ssl 连接

java - 如何在jdbc中执行oracle过程