在DBMS_METADATA之前, 要获得建表语法, 估计很多人都要用Toad或PL/SQL Developer之类的程序了, 不过很多数据库运行在Unix或Linux上, 并不允许我们用这类工具去连接, 这时还真是一件难事. 就算有了DBMS_METADATA我也并不觉得它很方便, 因此不如自已写一个角本, 在我的DBDiff程序中, 已经通过exp/imp的办法实现了, 将相关部分功能独立出来, 就成了getddl工具(Windows版本).

    程序经以过以下步骤来实现这个功能: 1, rows=n进行导出; 2, 用show=y加上indexfile选项生成内容; 3, 处理生成的indexfile并打印出DDL语句. 因此这个小工具需要Oracle的客户端, 并且客户端的版本不能高于服务器端.

Usage: getddl table=… [user=...]
(c) Copyright Lou Fangxin, 2008, all rights reserved.

    user就是exp或imp时的用户名, table就是exp的tables参数, user参数不指定就以sys用户连接. 下面来看一个例子.

C:\>getddl table=sh2.t_iottest
CREATE TABLE “T_IOTTEST” (“COL1″ NUMBER NOT NULL ENABLE,
  PRIMARY KEY (“COL1″) ENABLE)
  ORGANIZATION INDEX PCTFREE 10
  STORAGE ( FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) PCTTHRESHOLD 50 ;

    在生成的DDL角本中, 没有表对应的Trigger, 如果是Context有关的, 也有可能不准确, 另外表的授权语句不能生成. 用这个工具导出的DDL语句中没有Tablespace子句, 也没有Initial和Next子句. 欢迎大家使用!