如何在oracle中的现有表上生成(或获取)ddl脚本?我必须在Hive中重新创建它们

VSJ*_*VSJ 8 oracle ddl plsql

如何在oracle中的现有表上生成DDL脚本?我正在开发一个项目,我必须重新创建Oracle表中存在的一些表到Hive中.

a_h*_*ame 14

如果您的SQL客户端不支持此功能,那么您可以使用该dbms_metadata软件包获取数据库中几乎所有内容的源代码:

对于表使用这样的东西:

select dbms_metadata.get_ddl('TABLE', 'YOUR_TABLE_NAME')
from dual;
Run Code Online (Sandbox Code Playgroud)

您也可以同时对所有表执行此操作:

select dbms_metadata.get_ddl('TABLE', table_name)
from user_tables;
Run Code Online (Sandbox Code Playgroud)

并将输出假脱机为SQL脚本.

更多详细信息请参见手册:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_metada.htm

  • 如果没有模式的第三个参数,它可能会尝试在 SYSTEM 模式中查找表,即使会话 current_schema 不同:`select dbms_metadata.get_ddl('TABLE', 'YOUR_TABLE_NAME', 'YOUR_SCHEMA_NAME') from dual;` (5认同)

Lal*_*r B 5

只是扩大@a_horse_with_no_name的答案。使用DBMS_METADATA,您可能必须照顾格式SQL*Plus以便正确获得输出。

例如,我要获取DDLfor 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>
Run Code Online (Sandbox Code Playgroud)

但是,那不是我所期望的。

因此,正确设置格式会给我我想要的输出

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>
Run Code Online (Sandbox Code Playgroud)