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

pat*_*ney 29 oracle sql-scripts data-dictionary oracle11g

我正在上课,我很难受.我们需要编写一个像DESCRIBE命令一样的Oracle脚本.我们使用的这本书描述了如何使用数据字典非常糟糕.不是寻找答案,而是寻找正确方向的一点.

Ben*_*Ben 41

您正在寻找USER_TAB_COLUMNS- 所有列,以及它们在模式中执行查询的描述 - 或ALL_TAB_COLUMNS- 除了用户有权查看的所有表之外.

典型的查询可能是:

select *
  from user_tab_columns
 where table_name = 'MY_TABLE'
 order by column_id
Run Code Online (Sandbox Code Playgroud)

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';
Run Code Online (Sandbox Code Playgroud)

您可以找到所有这类视图select * from dictionary,这是数据字典的顶级或查看文档.

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


Pop*_*Pop 14

您还可以检索可用于重新创建表的整个命令:

select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
Run Code Online (Sandbox Code Playgroud)