我被要求记录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 XP,服务器是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
按时间顺序获取表格(安装程序创建它们的顺序)允许我按逻辑顺序记录它们(我毕竟写了安装程序)。
答案 0 :(得分:1)
可以从ALL_TABLES和ALL_TAB_COLUMNS中提取元数据。
TOAD提供了一个提取上述报告的工具,但如果它是一次性的话,我可能会用直接的SQL来做。