我被要求记录一个Oracle数据库。我不需要EER图或任何花哨的东西:一个简单的可打印文档,包含表和列的描述就可以了。但是,我不喜欢为所有79个表键入列名。是否有任何工具从数据库服务器中提取这些信息,可能包含一些基本信息,如数据类型和注释?
Table: Foo
Comment: Definition of system foo
Columns:
Name | Data type | Default value | Allow NULL | Key | Comment
-----------------------------------------------------------------------------------------
FOO_ID | NUMBER(*,0) | - | NOT NULL | Primary Key | Value from FOO_SEQ
DATE_ADDED | DATE | SYSDATE | NOT NULL | - | -
FOO_NAME | VARCHAR2(50) | - | NOT NULL | Unique | Foo identifier我正在运行Windows,服务器是11g。
后果
我在在线Oracle文档中找不到合适的视图索引,所以我最终抓取了PDF版本并搜索了它,直到得到以下查询:
/*
* Tables and views
*/
SELECT UO.OBJECT_NAME, UO.OBJECT_TYPE, UO.TEMPORARY, TC.COMMENTS
FROM USER_OBJECTS UO
LEFT JOIN USER_TAB_COMMENTS TC ON UO.OBJECT_NAME=TC.TABLE_NAME
WHERE UO.OBJECT_TYPE IN ('TABLE', 'VIEW')
ORDER BY UO.CREATED, UO.OBJECT_ID
/*
* Columns
*/
SELECT TC.TABLE_NAME, TC.COLUMN_NAME,
TC.DATA_TYPE, TC.DATA_LENGTH, TC.DATA_PRECISION, TC.DATA_SCALE, TC.CHAR_USED,
TC.DATA_DEFAULT, TC.NULLABLE, CC.COMMENTS
FROM USER_TAB_COLUMNS TC
LEFT JOIN USER_COL_COMMENTS CC ON TC.TABLE_NAME=CC.TABLE_NAME AND TC.COLUMN_NAME=CC.COLUMN_NAME
ORDER BY TC.TABLE_NAME, TC.COLUMN_ID
/*
* Restrictions
*/
SELECT UC.TABLE_NAME, UC.CONSTRAINT_NAME, UC.CONSTRAINT_TYPE, /*UC.SEARCH_CONDITION, UC.R_CONSTRAINT_NAME, UC.DELETE_RULE,*/
CC.COLUMN_NAME, CC.POSITION
FROM USER_CONSTRAINTS UC
LEFT JOIN USER_CONS_COLUMNS CC ON UC.CONSTRAINT_NAME=CC.CONSTRAINT_NAME
ORDER BY UC.TABLE_NAME, UC.CONSTRAINT_TYPE, UC.CONSTRAINT_NAME, CC.POSITION按时间顺序获取表(安装程序创建表的顺序)允许我按逻辑顺序记录它们(毕竟,我编写了安装程序)。
发布于 2010-08-12 07:49:59
元数据可以从ALL_TABLES和ALL_TAB_COLUMNS中提取。
蟾蜍提供了一个工具来提取类似上述的报告,但是如果它是一次性的话,我可能会使用直接的SQL。
https://stackoverflow.com/questions/3465677
复制相似问题