如何在oracle中的现有表上生成DDL脚本?我正在开发一个项目,我必须在Oracle表中重新创建一些表到Hive中。
答案 0 :(得分:10)
如果您的SQL客户端不支持此功能,那么您可以使用dbms_metadata
包来获取数据库中几乎所有内容的源代码:
对于表格,请使用以下内容:
select dbms_metadata.get_ddl('TABLE', 'YOUR_TABLE_NAME')
from dual;
您也可以同时对所有表格执行此操作:
select dbms_metadata.get_ddl('TABLE', table_name)
from user_tables;
并将输出假脱机为SQL脚本。
手册中有更多详细信息:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_metada.htm
答案 1 :(得分:4)
在@ a_horse_with_no_name的答案上扩展一下。使用DBMS_METADATA
,您可能需要处理SQL*Plus
中的格式才能正确获取输出。
例如,我想获取DDL
表的SCOTT.EMP
。
SQL> select dbms_metadata.get_ddl('TABLE', 'EMP')
2 from dual;
DBMS_METADATA.GET_DDL('TABLE','EMP')
--------------------------------------------------------------------------------
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
SQL>
但是,这不是我的预期。
因此,正确设置格式会给我想要的输出
SQL> set long 100000
SQL> set head off
SQL> set echo off
SQL> set pagesize 0
SQL> set verify off
SQL> set feedback off
SQL> select dbms_metadata.get_ddl('TABLE', 'EMP')
2 from dual;
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")
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 DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ENABLE,
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "SCOTT"."DEPT" ("DEPTNO") 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 DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
SQL>
答案 2 :(得分:-1)
我想在这里在SQL中运行可行的脚本
例如:创建表“ SCOTT”。“ EMP” (“ EMPNO” NUMBER(4,0), “ ENAME” VARCHAR2(10), 像这样
不喜欢: 创建表“ SCOTT”。“ EMP” (“ EMPNO” NUMBER(4,0), “ ENAME” VARCHAR2(10), “ JOB” VARCHAR2(9), “ MGR” NUMBER(4,0), “雇用”日期, “ SAL” NUMBER(7,2), “ COMM” NUMBER(7,2), “ DEPTNO” NUMBER(2,0), 约束“ PK_EMP”主键(“ EMPNO”) 使用INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255计算统计 存储(初始65536下一个1048576最小1最大2147483645 PCTINCREASE 0个免费列表1个免费列表组1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 表空间“用户”启用, 约束“ FK_DEPTNO”外键(“ DEPTNO”) 参考“ SCOTT”。“ DEPT”(“ DEPTNO”)启用 )立即创建分部 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS记录 存储(初始65536下一个1048576最小1最大2147483645 PCTINCREASE 0个免费列表1个免费列表组1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 表空间“用户”
SQL>