记录Oracle数据库

时间:2010-08-12 07:46:43

标签: oracle documentation oracle11g

我被要求记录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

按时间顺序获取表格(安装程序创建它们的顺序)允许我按逻辑顺序记录它们(毕竟写了安装程序)。

1 个答案:

答案 0 :(得分:1)

可以从ALL_TABLES和ALL_TAB_COLUMNS中提取元数据。

TOAD提供了一个提取上述报告的工具,但如果它是一次性的话,我可能会用直接的SQL来做。