有人可以告诉我如何使用 SQL 提取我的表定义吗?我想从我的 Oracle 模式中提取所有表的数据类型和其他信息。我有大约100张桌子。
我需要我的 Oracle 模式的完整文档。我的模式名称是“cco”。
我可以通过 SQL 做到这一点吗?
我正在使用 Toad for Data Analyst 3.3。如果这个工具有帮助,请告诉我。
你可以试试这个——
select * from all_tab_cols
where owner = 'CCO';
要获取当前用户的所有表的 DDL,您可以使用以下命令:
select dbms_metadata.get_ddl('TABLE', table_name)
from user_tables;
您将需要调整您的 SQL 客户端,以便能够正确显示CLOB
列的内容。
更多细节(例如关于如何获取其他对象的 DDL)可以在手册中找到:http: //docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_metada.htm
您可以使用该表:USER_TAB_COLUMNS
查找以下查询示例
select
table_name,
column_name,
data_type,
data_length,
data_precision,
nullable
from USER_TAB_COLUMNS
where table_name = '<table_name>';
这只是一个示例,您还可以执行 aselect *
以获取更多信息。
您还可以使用该表:all_tab_columns
为了获得更好的显示效果,您可以使用:
select table_name,column_name, data_type||
case
when data_precision is not null and nvl(data_scale,0)>0 then '('||data_precision||','||data_scale||')'
when data_precision is not null and nvl(data_scale,0)=0 then '('||data_precision||')'
when data_precision is null and data_scale is not null then '(*,'||data_scale||')'
when char_length>0 then '('||char_length|| case char_used
when 'B' then ' Byte'
when 'C' then ' Char'
else null
end||')'
end||decode(nullable, 'N', ' NOT NULL') as data_type
from user_tab_columns
where table_name = '<TABLE_NAME>';