如何导出oracle建表语句(不想要系统添加的部分)

时间:2021-11-24 08:37:50

运用  select dbms_metadata.get_ddl('TABLE','DEPT','SCOTT')from dual;的时候,会显示出 CREATE TABLE "SCOTT"."DEPT"   (    "DEPTNO" NUMBER(2,0),
        "DNAME" VARCHAR2(14),
        "LOC" VARCHAR2(13),
         CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  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 FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)   TABLESPACE "USERS"
这些内容
但是我要将ddl语句取出在mysql中建表的时候,只需要
CREATE TABLE "SCOTT"."DEPT"
   (    "DEPTNO" NUMBER(2,0),
        "DNAME" VARCHAR2(14),
        "LOC" VARCHAR2(13),
         CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO"))
这一部分就可以了,剩下的系统添加的部分mysql也不识别
想询问一下有没有语句直接抽取的是列明,字段名,主外键之类的!!!!

12 个解决方案

#1


打开plsqldev,在sql窗口内写入表名,右键,查看(英文版是view)

#2


然后,右下角有个 view sql 

#3


引用 2 楼 xinpingf 的回复:
然后,右下角有个 view sql

啊 我没说明白 我需要在脚本里调用...developer没法用脚本调用啊...
还有别的方法么

#4


引用 3 楼 chenyc0123 的回复:
引用 2 楼 xinpingf 的回复:然后,右下角有个 view sql
啊 我没说明白 我需要在脚本里调用...developer没法用脚本调用啊...
还有别的方法么


有一个参数,具体忘记了....呼呼

#5


那就自己写咯……
select get_table_ddl('gr_ylzf_ylj') from dual

#6


引用 5 楼 xinpingf 的回复:
那就自己写咯……
SQL code?1select get_table_ddl('gr_ylzf_ylj') from dual


擦……

create or replace function get_table_ddl(iv_tablename in varchar2) return varchar2 is
  v_sql varchar2(4000);
  v_col_list varchar2(4000);
begin

  v_sql := 'create table ' || iv_tablename || '(' || chr(10);

  for r in (select cname, coltype,
                   case
                     when precision is not null then
                      '(' || precision || ',' || scale || ')'
                     when coltype = 'DATE' then
                      null
                     else
                      '(' || width || ')'
                   end width, nulls
              from col
             where tname = upper(iv_tablename)
             order by colno) loop
    v_col_list := ',' || v_col_list || r.CNAME || ' ' || r.coltype || r.width || ' ' || r.nulls || chr(10) ;
  end loop;

  v_col_list := substr(v_col_list,2);

  v_sql := v_sql || v_col_list || ')';

  return v_sql;

end;

#7



BEGIN
 DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE);
 DBMS_OUTPUT.PUT_LINE( DBMS_METADATA.GET_DDL('TABLE','EMP'));  
 DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');
END;


------------------------------------------
  CREATE TABLE "SCOTT"."EMP" 
   ( "EMPNO" NUMBER(4,0), 
"ENAME" VARCHAR2(10), 
"JOB" VARCHAR2(9), 
"MGR" NUMBER(4,0), 
"HIREDATE" DATE, 
"SAL" NUMBER(7,2), 
"COMM" NUMBER(7,2), 
"DEPTNO" NUMBER(2,0), 
 CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ENABLE, 
 CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
  REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
   ) 

------------------------------------------------------
这个是我能得到的最简单的参数了,只有有没有其他的参数,需要参阅其他文档.

#8


1 用工具:PL/SQL Developer可以生成脚本,有什么没什么都可以自己控制。
         Power Designer 更好点,可以直接从数据库里抽取模型,换个方言直接生成MySQL的了。
2 用程序 :自己写。 

#9


用Power Designer

#10


引用 7 楼 ziwen00 的回复:
SQL code?12345BEGIN DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE); DBMS_OUTPUT.PUT_LINE( DBMS_METADATA.GET_DDL('TABLE','EMP'));   DBMS_META……

请问这个怎么用啊 没咋看懂啊...新手 见谅

#11


引用 10 楼 chenyc0123 的回复:
引用 7 楼 ziwen00 的回复:
SQL code?12345BEGIN DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE); DBMS_OUTPUT.PUT_LINE( DBMS_METADATA.GET_DDL('TABLE','EMP'));   D……

参考官方的concept
http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_metada.htm#ARPLS640

#12


该回复于2014-01-14 10:29:15被管理员删除

#1


打开plsqldev,在sql窗口内写入表名,右键,查看(英文版是view)

#2


然后,右下角有个 view sql 

#3


引用 2 楼 xinpingf 的回复:
然后,右下角有个 view sql

啊 我没说明白 我需要在脚本里调用...developer没法用脚本调用啊...
还有别的方法么

#4


引用 3 楼 chenyc0123 的回复:
引用 2 楼 xinpingf 的回复:然后,右下角有个 view sql
啊 我没说明白 我需要在脚本里调用...developer没法用脚本调用啊...
还有别的方法么


有一个参数,具体忘记了....呼呼

#5


那就自己写咯……
select get_table_ddl('gr_ylzf_ylj') from dual

#6


引用 5 楼 xinpingf 的回复:
那就自己写咯……
SQL code?1select get_table_ddl('gr_ylzf_ylj') from dual


擦……

create or replace function get_table_ddl(iv_tablename in varchar2) return varchar2 is
  v_sql varchar2(4000);
  v_col_list varchar2(4000);
begin

  v_sql := 'create table ' || iv_tablename || '(' || chr(10);

  for r in (select cname, coltype,
                   case
                     when precision is not null then
                      '(' || precision || ',' || scale || ')'
                     when coltype = 'DATE' then
                      null
                     else
                      '(' || width || ')'
                   end width, nulls
              from col
             where tname = upper(iv_tablename)
             order by colno) loop
    v_col_list := ',' || v_col_list || r.CNAME || ' ' || r.coltype || r.width || ' ' || r.nulls || chr(10) ;
  end loop;

  v_col_list := substr(v_col_list,2);

  v_sql := v_sql || v_col_list || ')';

  return v_sql;

end;

#7



BEGIN
 DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE);
 DBMS_OUTPUT.PUT_LINE( DBMS_METADATA.GET_DDL('TABLE','EMP'));  
 DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');
END;


------------------------------------------
  CREATE TABLE "SCOTT"."EMP" 
   ( "EMPNO" NUMBER(4,0), 
"ENAME" VARCHAR2(10), 
"JOB" VARCHAR2(9), 
"MGR" NUMBER(4,0), 
"HIREDATE" DATE, 
"SAL" NUMBER(7,2), 
"COMM" NUMBER(7,2), 
"DEPTNO" NUMBER(2,0), 
 CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ENABLE, 
 CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
  REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
   ) 

------------------------------------------------------
这个是我能得到的最简单的参数了,只有有没有其他的参数,需要参阅其他文档.

#8


1 用工具:PL/SQL Developer可以生成脚本,有什么没什么都可以自己控制。
         Power Designer 更好点,可以直接从数据库里抽取模型,换个方言直接生成MySQL的了。
2 用程序 :自己写。 

#9


用Power Designer

#10


引用 7 楼 ziwen00 的回复:
SQL code?12345BEGIN DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE); DBMS_OUTPUT.PUT_LINE( DBMS_METADATA.GET_DDL('TABLE','EMP'));   DBMS_META……

请问这个怎么用啊 没咋看懂啊...新手 见谅

#11


引用 10 楼 chenyc0123 的回复:
引用 7 楼 ziwen00 的回复:
SQL code?12345BEGIN DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE); DBMS_OUTPUT.PUT_LINE( DBMS_METADATA.GET_DDL('TABLE','EMP'));   D……

参考官方的concept
http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_metada.htm#ARPLS640

#12


该回复于2014-01-14 10:29:15被管理员删除