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

要将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;

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle导出结构可以使用数据字典视图和expdp命令实现。 1. 使用数据字典视图导出结构 可以使用Oracle的数据字典视图来导出结构,例如: ``` SELECT dbms_metadata.get_ddl('TABLE', '名') FROM dual; ``` 其中,'名'是要导出结构的名称。此命令将返回一个包含结构的DDL语句。 2. 使用expdp命令导出结构 也可以使用Oracle的expdp命令来导出结构。例如: ``` expdp 用户名/密码 directory=目录名 dumpfile=导出文件名.dmp logfile=日志文件名.log content=metadata_only tables=名 ``` 其中,'用户名'和'密码'是要导出结构所属的用户的凭据,'目录名'是导出文件和日志文件所在的目录,'导出文件名.dmp'是导出文件的名称,'日志文件名.log'是日志文件的名称,'名'是要导出结构的名称。 要同时导出多个结构,可以在'tables'参数中使用逗号分隔名。 Oracle导出存储过程可以使用PL/SQL Developer等工具,或者使用数据字典视图和expdp命令。 1. 使用PL/SQL Developer等工具导出存储过程 可以使用PL/SQL Developer等工具来导出存储过程。例如,在PL/SQL Developer中,可以按照以下步骤操作: - 打开PL/SQL Developer并连接到数据库。 - 在"对象浏览器"中选择要导出存储过程。 - 右键单击所选存储过程并选择"导出"。 - 在"导出对象"对话框中选择要导出的对象类型和文件格式,并指定导出文件的路径和名称。 - 单击"确定"以开始导出过程。 2. 使用数据字典视图导出存储过程 可以使用Oracle的数据字典视图来导出存储过程。例如: ``` SELECT dbms_metadata.get_ddl('PROCEDURE', '存储过程名') FROM dual; ``` 其中,'存储过程名'是要导出存储过程的名称。此命令将返回一个包含存储过程定义的DDL语句。 3. 使用expdp命令导出存储过程 也可以使用Oracle的expdp命令来导出存储过程。例如: ``` expdp 用户名/密码 directory=目录名 dumpfile=导出文件名.dmp logfile=日志文件名.log content=metadata_only procedures=存储过程名 ``` 其中,'用户名'和'密码'是要导出存储过程所属的用户的凭据,'目录名'是导出文件和日志文件所在的目录,'导出文件名.dmp'是导出文件的名称,'日志文件名.log'是日志文件的名称,'存储过程名'是要导出存储过程的名称。 要同时导出多个存储过程,可以在'procedures'参数中使用逗号分隔存储过程名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值