视窗
loading...
您现在的位置:首页 > IT认证 > oracle认证 >

Oracle开发技术:oracle存储过程实现导出表结构


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_lumn_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_unt 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_unt 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;

闂侀潧妫岄崑锟�

闂侀潧妫岄崑锟�

闂侀潧妫欓崝鏇㈠储閵堝洦瀚婚柨婵嗘嫅缁憋綁鏌¢崟顐︻€楅柟铚傚嵆閹囧醇閻斿摜绉柣鐘叉搐閻°劌危閹达箑违闁跨噦鎷�
闂佸搫鐗滈崜娑㈡偟椤栫偞鐒鹃柕濞垮劚閻庤菐閸ワ絽澧插ù鐓庢嚇瀵爼濡烽敂鍓у煃婵炲瓨绮岀花鑲╄姳娴煎瓨鍤傞柡鍐ㄥ€荤粔褰掓煥濞戣櫕瀚�闁诲海鏁搁、濠偯归崱妯诲闁伙絽鏈悾鍗炃庨崶锝呭⒉濞寸厧鎳橀獮瀣箣濠婂嫮鎷ㄩ梺鍛婃⒐缁嬫帡鎯囨导鏉戝唨闁搞儯鍔嶉~鏍庨崶锝呭⒉濞寸厧鎳橀幆鍐礋椤愩垺鐦旀繝銏f硾鐎氬摜妲愰敓锟�闂佺懓鐡ㄩ崹鍐测堪閹寸姳鐒婂┑鐘叉搐濞呫垹霉閿濆棛鐭庨柍褜鍓欓幊鎰枔閹达附鍋嬮柛顐ゅ枑缂嶁偓闂佹垝鐒﹂妵鐐电礊閺冨牆绾ч柛鎰硶缁€锟�闁诲簼绲婚~澶愬垂濠婂嫮顩锋い鎺戝暞缁侇噣寮堕悙鍨珪婵炲牊鍨剁粚閬嶅焺閸愌呯婵犵鈧啿鈧懓锕㈡担鍓插殨闁稿本绻嶉崬鎾煙鐎涙ḿ澧繝鈧担鍦懝闁割煈鍋呯紞鈧梺鐟扮摠閻楃偟鎹㈠顑芥灃闁哄洦鐭换鍡涙煙椤撗冪仴妞ゆ洦鍓熷畷锝嗙節閸愨晩妲梺鑹伴哺濮婂鏌堥幘顔肩闁瑰瓨绮嶇划锕傛煥濞戞ɑ婀版繝鈧幍顔惧崥婵炲棗娴风粣妤冪磼閺傛鍎忕€规挸妫濆畷姘舵偐缂佹ḿ褰戦梺鎸庡喕閹凤拷闁诲海鏁搁幊鎾舵暜椤愶箑绀嗘繛鎴灻弫鍫曟倵绾拋娼愰柛銊︾矋缁傛帡顢楁担绋啃梺瑙勬緲缁绘垿寮鐣岊浄婵せ鍋撻柍褜鍓欓崐鍝ョ礊鐎n喗鍎嶉柛鏇ㄥ帎瑜版帗鐓€妞ゆ帒锕︾粈锟�闂佽壈椴稿濠氭焾閹绢喖妫橀柣鐔稿绾偓闂佹寧绋掑畝鎼佸磻閺嶃劎顩烽柨鐕傛嫹:webmaster@jscj.com闂侀潧妫岄崑鎾绘煟椤厾绁烽柣锔跨矙閺佸秹鏁撻敓锟�4008816886
上一条:Oracle安装配置:干净彻底的卸载Oracle
下一条:下面没有链接了

相关文章

无相关信息
更新时间2022-09-16 10:07:20【至顶部↑】
联系我们 | 邮件: webmaster@jscj.com | 客服热线电话:4008816886(QQ同号) |  濠电姷鏁搁崕鎴犵礊閳ь剚銇勯弴鍡楀閸欏繘鏌i幇顕呮毌闁稿鎹囬悰顕€宕归鍙ョ棯婵犵數濮崑鎾绘煕閵夋垵鑻▓顐㈩渻閵堝棙顥嗘い鏂匡功閹广垽鏁撻敓锟�

付款方式留言簿投诉中心网站纠错二维码手机版

电话:
付款方式   |   给我留言   |   我要纠错   |   联系我们