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

24 浏览
0 Comments

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

我正在上一门课,这门课很难。我们需要编写一个 Oracle 脚本,该脚本将像 DESCRIBE 命令一样运行。我们使用的书对如何使用数据字典的描述非常差。我不是在寻找答案,而是需要正确的方向。

admin 更改状态以发布 2023年5月24日
0
0 Comments

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

select dbms_metadata.get_ddl('TABLE','','') from dual;

0
0 Comments

您正在寻找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找到所有这种视图,这是数据字典的顶级,或者通过查看文档

还有DBA_TAB_COLUMNS,它与ALL_TAB_COLUMNS相同,但适用于数据库中的每个表。这假设您有权查看它和表。如果您无权访问此表,则需要获取您的DBA授予您SELECT ANY DICTIONARY权限。

0