`
gip666
  • 浏览: 40021 次
  • 性别: 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数据库导出表结构到WORD文档

    "oracle数据库导出表结构到WORD文档"是一个实用的操作,它能够帮助我们生成包含所有表定义、字段信息、主键、外键等的详细报告。通过这个工具,我们可以快速地将Oracle中的数据库对象信息整理成Word文档,方便打印、...

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

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

    Oracle数据库表结构导出工具

    在日常管理和开发过程中,有时我们需要将Oracle数据库的表结构导出为其他格式,便于分析、备份或共享。"Oracle数据库表结构导出工具"就是为此目的设计的实用程序,它能够方便地将表结构转换成易于查看和处理的Excel...

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

    它可能调用了上述提到的DB2和Oracle的命令行工具,以导出表结构、存储过程和表空间信息。用户运行这个文件时,应该会生成相应的DDL和PL/SQL脚本文件。 3. **CODE**: 这可能包含具体的SQL脚本或存储过程代码,用于更...

    Oracle数据库表结构导出工具Excel

    总结来说,"Oracle数据库表结构导出工具Excel"通过DBExport软件实现,能够有效地帮助数据库管理员和开发人员快速获取和分享Oracle数据库的表结构信息。通过阅读DBExport的使用手册,用户可以学会如何利用这个工具...

    【数据泵】EXPDP导出表结构(真实案例).pdf

    本文档《【数据泵】EXPDP导出表结构(真实案例).pdf》记录了作者在使用数据泵导出表结构的实践经验,并详细列出了关键知识点和操作步骤。以下是文档中的主要知识点总结: 1. 数据泵EXPDP和IMPDP工具的基本使用: - ...

    导出Oracle表结构

    这些组件可以方便地集成到Delphi项目中,通过它们提供的API或方法,程序员可以实现包括导出表结构在内的各种数据库操作。 例如,使用`Oracle Client`,开发者可以调用`OracleConnection`对象打开数据库连接,然后...

    DBExportDoc V1.0 For Oracle导出表结构到word文档

    DBExportDoc V1.0 For Oracle在导出表结构时,会包含以下关键元素: 1. **表名**:导出的文档将列出所有指定数据库中的表名,便于快速浏览和定位。 2. **字段列表**:每个表的字段及其对应的字段名、数据类型、...

    将oracle中的表结构导出的工具包

    【Oracle表结构导出工具包】是一个集合了各种依赖库的压缩包,旨在帮助用户方便地从Oracle数据库中导出表结构。这个工具包的核心功能是将Oracle数据库的表定义转换为可读的Excel格式,便于管理和分享。下面将详细...

    自动导出oracle数据库表结构

    描述中提到,该工具能够“完美排版”,这意味着它不仅导出表结构,还会对输出结果进行格式化,使得结构清晰易读,这对于开发者来说尤其重要,因为整洁的格式有助于理解和分析数据库设计。同时,工具的使用非常简单,...

    c# 导出oracle数据库下所有表结构

    这个过程不仅涵盖了导出表结构的基本步骤,还可以根据实际需求进行扩展,比如添加索引信息、约束条件等。在实际操作中,还需要注意处理可能的异常和错误,确保代码的健壮性。 综上所述,通过C#连接Oracle数据库并...

    MySql 和Oracle 数据库结构导出Word

    MySQL的数据库结构包括表、视图、存储过程、触发器等,通过SQL语句可以轻松创建、修改和查看这些结构。 Oracle数据库则是由甲骨文公司开发的一款企业级数据库系统,它支持大型复杂应用,提供了高度的可扩展性和安全...

    导出Oracle 表结构工具

    DBExport是一个专门设计用于Oracle数据库的工具,它能够快速高效地导出表结构和数据。标题中的"DBExport2.51 For ORACLE"指的是该工具的特定版本,适用于Oracle数据库,版本号为2.51。这个工具提供了直观的界面和...

    PowerDesigner 导出表结构 到Excel

    1,打开PowerDesigner,找到创建的物理模型(Physical Data Model), 2,使用快捷键,或者 在PowerDesigner菜单栏中,依次点击“Tools ->Excute Commands->Edit/Run Script....4,将导出的结果(Excel)保存到自己的位置

    PowerDesigner15连接Oracle数据库并导出Oracle的表结构

    "PowerDesigner15连接Oracle数据库并导出Oracle的表结构" 本文主要介绍了使用PowerDesigner连接Oracle数据库,并生成E-R图的详细步骤。 知识点1:PowerDesigner简介 PowerDesigner是一个强大的数据建模工具,能够...

    java实现导出oarcle表结构到excel

    在Java编程环境中,将Oracle数据库的表结构导出到Excel是一种常见的需求,特别是在数据库管理和数据分析时。这个场景可以通过两个核心类来实现:`TableStructureToExcel.java`和`ConnectionOracle.java`。这两个类...

    Oracle表结构导出Excel工具

    3. **数据导出**:导出表结构到Excel有助于非技术人员理解数据库设计,同时也可以方便地进行数据对比、分析和报告。Excel的灵活性使得用户可以轻松对数据进行排序、筛选和计算。 4. **日文版**:此工具提供日文版,...

    Java存储过程实现Oracle远程逻辑备份与恢复.pdf

    【Java存储过程实现Oracle远程逻辑备份与恢复】 Oracle数据库是一个基于网络计算的系统,它内建了对Java的支持,包括Oracle JVM(Java Virtual Machine),这使得开发者能够在数据库服务器端执行复杂的计算任务,...

    oracle表结构导word工具

    "Oracle表结构导Word工具"就是为了解决这个问题而设计的,它能够将Oracle数据库中的表结构方便快捷地导出成Word文档,使得信息更易于阅读和共享。 这个工具的核心功能在于自动化生成表结构的详细文档,包括表名、...

Global site tag (gtag.js) - Google Analytics