平时经常通过PL/SQL Developer的View SQL选项查看建表语句,非常便捷;那么,如果没有图形化工具,我们如何获取指定表的建表DDL语句呢?也很简单,只需要一个查询语句,就可以获取对象的详细的DDL描述。
创建测试表
首先我们在hoegh用户下创建测试表H。
-
SQL>
-
SQL> show user
-
USER 为 "HOEGH"
-
SQL>
-
SQL> create table H(id number primary key,name varchar2(20));
-
-
表已创建。
-
-
SQL>
使用DBMS_METADATA.GET_DDL
我们使用DBMS_METADATA.GET_DDL来获取表的DDL语句。
-
SQL>
-
SQL> SET LONG 2000000
-
SQL> SET PAGESIZE 0
-
SQL> select dbms_metadata.get_ddl('TABLE','H','HOEGH') from dual;
-
-
CREATE TABLE "HOEGH"."H"
-
( "ID" NUMBER,
-
"NAME" VARCHAR2(20),
-
PRIMARY KEY ("ID")
-
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
-
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
-
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
-
TABLESPACE "USERS" ENABLE
-
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
-
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
-
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
-
TABLESPACE "USERS"
-
-
-
-
已选择 1 行。
-
-
SQL>
使用DBMS_METADATA.OPEN
也许,大多时候我们只希望获取表结构而对表的物理存储结构不感兴趣,那么可以通过
使用DBMS_METADATA.OPEN来实现,具体实现过程如下:
-
SQL>
-
SQL> DECLARE
-
2 V_STR CLOB;
-
3 V_HANDLE NUMBER;
-
4 V_TRANS_HANDLE NUMBER;
-
5 BEGIN
-
6 V_HANDLE := DBMS_METADATA.OPEN('TABLE');
-
7 DBMS_METADATA.SET_FILTER(V_HANDLE, 'NAME', 'H', 'TABLE');
-
8 V_TRANS_HANDLE := DBMS_METADATA.ADD_TRANSFORM(V_HANDLE, 'DDL');
-
9 DBMS_METADATA.SET_TRANSFORM_PARAM(V_TRANS_HANDLE, 'SEGMENT_ATTRIBUTES', FALSE);
-
10 V_STR := DBMS_METADATA.FETCH_CLOB(V_HANDLE);
-
11 FOR I IN 1..CEIL(DBMS_LOB.GETLENGTH(V_STR)/200) LOOP
-
12 DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(V_STR, 200, (I-1)*200 + 1));
-
13 END LOOP;
-
14 END;
-
15 /
-
-
CREATE TABLE "HOEGH"."H"
-
( "ID" NUMBER,
-
"NAME" VARCHAR2(20),
-
PRIMARY KEY ("ID") ENABLE
-
)
-
-
-
-
PL/SQL 过程已成功完成。
-
-
SQL>
需要注意的是,执行上述存储过程后可能没有输出结果,此时需要打开oracle自带的输出方法dbms_output;具体的,在执行set serveroutput on以后,使用dbms_output方法就可以输出信息了。
hoegh
15.11.16
-- The End --
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30162081/viewspace-1839664/
,如需转载,请注明出处,否则将追究法律责任。