Oracle如何批量导出数据库表结构(建表语句)

来源:互联网 发布:淘宝店铺联盟怎么弄 编辑:程序博客网 时间:2024/06/07 22:43

1. 用system用户创建路径 utl_dir用于存放文件

-- C:/dba必需是已经存在的目录create or replace directory UTL_DIR as 'C:\dba';--用sys用户登录给要访问的用户指定访问目录的权限 grant write on directory UTL_DIR to public;grant read on directory UTL_DIR to public;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2. 在需要导出表结构的用户下创建存储过程(导出单个表结构)

CREATE OR REPLACE PROCEDURE P_EXPORTDLL(P_TABLE_NAME VARCHAR2,                                        P_FILENAME   VARCHAR2) ISBEGIN  DECLARE    L_FILE     UTL_FILE.FILE_TYPE;    L_BUFFER   VARCHAR2(1000);    L_AMOUNT   BINARY_INTEGER := 100;    L_POS      INTEGER := 1;    L_CLOB     CLOB;    L_CLOB_LEN INTEGER;  BEGIN    SELECT DBMS_METADATA.GET_DDL('TABLE', P_TABLE_NAME) || ';'      INTO L_CLOB      FROM DUAL;    L_CLOB_LEN := DBMS_LOB.GETLENGTH(L_CLOB);    L_FILE     := UTL_FILE.FOPEN('UTL_DIR', P_FILENAME || '.sql', 'a', 1000);    WHILE L_POS < L_CLOB_LEN LOOP      DBMS_LOB.READ(L_CLOB, L_AMOUNT, L_POS, L_BUFFER);      UTL_FILE.PUT(L_FILE, L_BUFFER);      L_POS := L_POS + L_AMOUNT;    END LOOP;    UTL_FILE.FCLOSE(L_FILE);  END;END P_EXPORTDLL;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

3. 创建导出所有结构的存储过程函数

CREATE OR REPLACE PROCEDURE P_WHOLE ASBEGIN  FOR X IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP    P_EXPORTDLL(X.TABLE_NAME, 'paul');  END LOOP;END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4. 调用存储过程,批量导出表结构

EXEC P_WHOLE;
  • 1

最后,在C:\dba 目录下查看导出的 sql 文件。另外,下面是分享的两篇博文,供参考。

  1. 链接 1 
    oracle create or replace directory 的用法
  2. 链接 2 
    如何实现一个功能,将oracle中一个用户下的所有表结构导出到.sql文件中
原创粉丝点击