`
gip666
  • 浏览: 39190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle存储过程实现导出表结构

 
阅读更多
   要将数据库中的表结构全部倒出来,有分区表和非分区表,涉及到的字段有number、data、timestamp、varchar2、char。所以只针对了这几个字段的表的导出,如果表有其类型字段,则需要添加代码。分区表都是以时间做分区的,所以导出来的分区表结构都是以时间分区的。只是根据了自己实际情况写的,根据不同的情况要改写!

存储过程带一个参数,默认为Y,导出分区表的分区,如果指定其他值,如
execu table_frame('N'),则只导出表结构。

使用方法:
1、要导出哪个用户的所有表结构,就在该用户下执行最下面的存储过程。
2、如下建立一个directory,同样要在数据库服务器D盘下建立一个名为‘结构’的文件夹。
create or replace directory DIR_DUMP as 'd:/结构';
3、执行存储过程,生成的表结构代码就在路径d:/结构下的txt文件中。

create or replace procedure table_frame(v_partition_status varchar2 default 'Y')
is
   type column_type is table of  user_tab_columns.column_name%type;
   v_column column_type;
   type data_type is table of  user_tab_columns.data_type%type;
   v_type data_type;
   type length_type is table of  user_tab_columns.data_length%type;
   v_length length_type;
   type datapre_type is table of  user_tab_columns.DATA_PRECISION%type;
   v_ldatapre datapre_type;
   type datasca_type is table of  user_tab_columns.DATA_SCALE%type;
   v_dayasca datasca_type;
   v_str clob;

   file_name UTL_FILE.file_type;
   v_tables varchar2(50);

   partition_status varchar2(3);
   partition_keywords varchar2(30);
  
   TYPE part_cursor is ref CURSOR;
   part_name part_cursor;
  
   partition_name user_tab_partitions.partition_name%type;
   high_value user_tab_partitions.high_value%type;
begin
  file_name := UTL_FILE.FOPEN('DIR_DUMP','table.txt','w');

  --判断是否需要分区
  partition_status := v_partition_status;

  --按表循环
  for j in (select table_name  from user_tables  group by table_name ) loop
   v_tables :=upper(j.table_name);
   v_str := 'create table '||v_tables||'(';

   UTL_FILE.PUT_LINE(file_name,v_str);

   --提取表的字段信息
   select column_name,data_type,data_length,DATA_PRECISION,DATA_SCALE
    bulk collect into v_column,v_type,v_length,v_ldatapre,v_dayasca
      from user_tab_columns where table_name=v_tables;

    --按字段循环
    for i in 1..v_column.count loop
      if v_type(i)= 'DATE' or v_type(i) like 'TIMESTAMP%'  then
        v_str :=v_column(i)||' '||v_type(i)||',';
      elsif v_type(i)= 'NUMBER' and v_ldatapre(i) is not null  then
        v_str :=v_column(i)||' '||v_type(i)||'('||v_ldatapre(i)||','||v_dayasca(i)||'),';
      elsif v_type(i)= 'NUMBER' and v_ldatapre(i) is  null  then
        v_str :=v_column(i)||' '||v_type(i)||',';
      elsif v_type(i)= 'CLOB' or  v_type(i)= 'BLOB' or v_type(i)= 'LONG'   then
        v_str :=v_column(i)||' '||v_type(i)||',';
      elsif v_type(i)= 'VARCHAR2' or  v_type(i)= 'NVARCHAR2' or v_type(i)= 'CHAR' then
        v_str :=v_column(i)||' '||v_type(i)||'('||v_length(i)||'),';
      else v_str := '该字段类型没有在代码中整理';
      end if;
     
      if i=v_column.count then
        v_str :=substr(v_str,1,length(v_str)-1);
      end if;

      UTL_FILE.PUT_LINE(file_name,v_str);
     
    end loop;

    --判断是否添加分区
    if partition_status = 'Y' then     
    
     SELECT nvl(max(column_name),'0') into partition_keywords  FROM USER_PART_KEY_COLUMNS
      where object_type = 'TABLE'  and name=v_tables;
      if partition_keywords != '0' then
         UTL_FILE.PUT_LINE(file_name,')partition by range ('||partition_keywords||')(');
        
         open part_name for select partition_name,high_value  from user_tab_partitions
         where table_name = v_tables;
         v_str := null;
         loop
           fetch part_name into partition_name,high_value;            
           if part_name%notfound then
             --去掉最后逗号
             v_str :=substr(v_str,1,length(v_str)-1);
             UTL_FILE.PUT_LINE(file_name,v_str);
             exit;
           end if;         
           UTL_FILE.PUT_LINE(file_name,v_str);
           v_str :='partition '||partition_name||' values less than ('||high_value||'),';
         end loop;
      end if;
    end if;

    UTL_FILE.PUT_LINE(file_name,');');
    UTL_FILE.PUT_LINE(file_name,'-------------------------------------------------------------');

    end loop;
  
    UTL_FILE.fclose_all;
end;
分享到:
评论

相关推荐

    oracle定时存储过程导出用户表或者指定表及数据导出CSV文件

    (说明:存储过程.txt脚本说明,查询指定用户下的表结构和表数据,由于项目需求只查询了10条有效数据,如果需要全量的可以把里面j条件去掉即可;) 2.在服务器上创建对应的文件夹存放,我的是windows我在d盘建立了abc...

    DB2和ORACLE数据库导出表结构空间和存储过程脚本。

    可以在服务器上导出DB2和ORACLE的建表语句,存储过程,表空间,表结构等后台数据。

    Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包

    Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包 Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包

    oracle课程进度表

    oracle学习课程进度表详细介绍Oracle11g安装、升级 管理模式对象 Oracle性能调优 Oracle11g数据库备份与恢复 RAC概述 Oracle11g数据库概述及新特性 Oracle 11g Enterprise Manager简介 SGA和PGA调优 使用RMAN工具 ...

    21天学通Oracle

    5.3 修改Oracle数据表结构 73 5.3.1 利用工具修改数据表结构 73 5.3.2 利用命令修改数据表结构 74 5.4 删除数据表 75 5.4.1 利用工具删除数据表 76 5.4.2 利用SQL语句删除数据表 76 5.5 备份/恢复数据表 76 ...

    oracle数据库管理系统v3.5

    2、该系统可以调用ORACLE数据库的存储过程,可以执行SQL文件,可以把ORACLE数据库数据导出生成DMP文件,可以把DMP文件导入到ORACLE数据库中,可以把DMP文件打包上传到FTP服务器指定位置,可以把FTP服务器上指定位置...

    Oracle 10g应用指导

    在案例精讲中,对表压缩、约束的使能与失能、表的层次结构查询、防止删除表及对象、提取创建外键约束的脚本以及在线重新定义表结构的方法做了详细讲解。第6章 PL/SQL程序设计。介绍了PL/SQL中常用的函数、异常处理等...

    Oracle11g从入门到精通2

    6.2.2 表结构设计 6.2.3 表的创建 6.2.4 修改表结构 6.3 索引 6.3.1 索引的概念 6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 ...

    oracle database 10g 完整参考手册part1

    第39章 Java存储过程 第40章 Oracle真正应用群集 第41章 网格体系结构和管理 第Ⅷ部分 指南 第42章 Oracle数据字典指南 第43章 调整应用程序和SQL旅行者指南 第44章 调整中的案例分析 第45章 Oracle Application ...

    QingWeb Code Slave 代码生成器 v2.0

    1、管理数据库表,辅助日常查询、数据导出、生成常用SQL语句和存储过程、导出表结构文档。2、基于XSLT模板,生成常用操作的三层架构C#代码,包括插入、更新、删除、查询、分页查询等操作。 用户可自定义模板。3、...

    青云oracle工具

    7.oracle 有个特点,就是如果表结构发生变化,就会有很多视图,存储过程,触发器等跟着失效,这时候要把这些无效的对象重新编译一下。但是这个动作会经常遗忘, 所以我这里加了一个检索并修正无效对象的功能; 8....

    Oracle数据库管理员技术指南

    3.4.3 为卸载表的导出过程的选择语句 指定一个查询 3.4.4 导出/导入预计算优化程序统计 数据 3.4.5 可移动表空间 3.5 回顾 第4章 设计高可用性数据库 4.1 如何发现和保护“致命的弱点” 4.2 复用数据库控制...

    Oracle11g从入门到精通

    6.2.2 表结构设计 6.2.3 表的创建 6.2.4 修改表结构 6.3 索引 6.3.1 索引的概念 6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 6.5 数据操纵...

    最全的ORACLE 10G基础指南

    第3章 Oracle数据库的存储结构 2课时 第4章 管理数据库存储结构 4课时 第5章 管理Oracle例程 4课时 第6章 SQL*Plus基础 3课时 第7章 SQL基础 4课时 第8章 PL/SQL基础 4课时 第9章 管理用户和安全性 4课时 第10...

    DELPHI 将表、视图、存储过程转换为SQL语句.rar

    DELPHI 将表、视图、存储过程转换为SQL语句,导出文件时,会...目前支持视图脚本、存储过程脚本、用户表结构+数据+主键+默认值的提龋对标识也做了支持,加入了标识的开关,生成的SQL可以直接用来导入有标识的表。

    OracleDbTools.rar 青云oracle超人性化工具

    7.oracle 有个特点,就是如果表结构发生变化,就会有很多视图,存储过程,触发器等跟着失效,这时候要把这些无效的对象重新编译一下。但是这个动作会经常遗忘, 所以我这里加了一个检索并修正无效对象的功能;

    Oracle.11g.从入门到精通 (2/2)

    6.2.4 修改表结构 6.3 索引 6.3.1 索引的概念 6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 6.5 数据操纵与数据查询 6.5.1 复制原表插入记录 6.5.2 使用...

    Oracle.11g.从入门到精通 (1/2)

    6.2.4 修改表结构 6.3 索引 6.3.1 索引的概念 6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 6.5 数据操纵与数据查询 6.5.1 复制原表插入记录 6.5.2 使用...

Global site tag (gtag.js) - Google Analytics