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

php中文网
发布: 2016-06-07 17:29:27
原创
1188人浏览过

要将Oracle数据库中的表结构全部倒出来,有分区表和非分区表,涉及到的字段有number、data、timestamp、varchar2、char。所以只针

要将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)||',';
      else
        v_str :=v_column(i)||' '||v_type(i)||'('||v_length(i)||'),';
      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;

Matlab语言的特点 中文WORD版
Matlab语言的特点 中文WORD版

本文档主要讲述的是Matlab语言的特点;Matlab具有用法简单、灵活、程式结构性强、延展性好等优点,已经逐渐成为科技计算、视图交互系统和程序中的首选语言工具。特别是它在线性代数、数理统计、自动控制、数字信号处理、动态系统仿真等方面表现突出,已经成为科研工作人员和工程技术人员进行科学研究和生产实践的有利武器。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Matlab语言的特点 中文WORD版 8
查看详情 Matlab语言的特点 中文WORD版

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号