学习oracle技术,每天学一点,每天进步一点

如何实现一个功能,将oracle中一个用户下的所有表结构导出到.sql文件中

上一篇 / 下一篇  2008-05-09 16:16:58 / 个人分类:pl/sql

pub上的一个案例 

http://www.itpub.net/thread-985145-1-1.html

 

1.用system用户创建路径 utl_dir用于存放文件ITPUB个人空间V1FV&Nn3|uDB

6o!VB `my$F4gK0wr0SQL> create or replace directory UTL_DIR as 'd:\dba';ITPUB个人空间 EU7R i:Jm V
SQL> grant write on directory UTL_DIR to public;
7]3a1F*d}$Ra ?g0SQL> grant read on directory UTL_DIR to public;ITPUB个人空间q#s@,?_4L

%lZ1eTdl0ITPUB个人空间3uO"q0U+J
2.在hr用户创建存储过程 导出单个表结构
q/w5LLP,U0create or replace procedure p_exportDLL(p_table_name varchar2,p_filename varchar2) isITPUB个人空间EMz;{Iy:L~"hU E
beginITPUB个人空间3z(g1d r+PA
ITPUB个人空间_I$| _W]2v2R3@
  declare
,n:Tq,R { UTK|0    l_file     UTL_FILE.FILE_TYPE;ITPUB个人空间4FE5l"N0VB\
    l_buffer   VARCHAR2(1000);ITPUB个人空间zb+q9o4f8P;m
    l_amount   BINARY_INTEGER := 100;ITPUB个人空间 M#nL7YO
    l_pos      INTEGER := 1;
D!D4zlw$S0    l_clob     clob;
$We m4OW+` h@0    l_clob_len INTEGER;ITPUB个人空间cD2wD:X2V/e
  begin
Ae*P,h_G-u0    select dbms_metadata.get_ddl('TABLE',p_table_name )||';' into l_clob from dual;
"M%}g `iU0    l_clob_len := DBMS_LOB.GETLENGTH(l_clob);
'b3v/BE-@0i0    l_file     := UTL_FILE.FOPEN('UTL_DIR', p_filename||'.sql', 'a', 1000);ITPUB个人空间F-AS v6{_*h?0lX+{
   
jUa s VMQM0   
6U.LQ6U L'wNR0ITPUB个人空间0F6WjEX9Y)t
    WHILE l_pos < l_clob_len LOOPITPUB个人空间![9E+A,ME e'B
      DBMS_LOB.READ(l_clob, l_amount, l_pos, l_buffer);ITPUB个人空间%w6pNu6U7P9N
      UTL_FILE.put(l_file, l_buffer);ITPUB个人空间nj};yRLyH
      l_pos := l_pos + l_amount;ITPUB个人空间'y5LBD@]!h#Y
    END LOOP;
c*VL:Ls8O+tX~&s0    UTL_FILE.FCLOSE(l_file);
P_K~ J1Ac0    --if @@errorITPUB个人空间,O/P:b q5PdvbG:^ xg3`
  end;
$T/vo$mT0end p_exportDLL;
FE!m{ E8o y2PV0ITPUB个人空间&[ Y4M8Ps#k3W;{ `
ITPUB个人空间R:R~GTxlz
3.导出所有表的结构ITPUB个人空间/JPy.K/^#N ~5U
CREATE OR REPLACE PROCEDURE p_whole ASITPUB个人空间t2xd)~De1Kn F#Nk
BEGIN
S'O"_^+Az0  FOR x IN (SELECT table_name FROM user_tables) LOOPITPUB个人空间 I}4_`FZ
       p_exportDLL(x.table_name,'paul');ITPUB个人空间~*B8M `U
  END LOOP;ITPUB个人空间*v$c!w0``,Lk
END  p_whole;

验证ITPUB个人空间Zf#wb F"qw3i
SQLbegin
&y%L.}YL$||0ITPUB个人空间w9U9ag {1Ko

w(V&V rp0mu A8[@0  2    
-- Call the procedureITPUB个人空间3@'ex2X{+P2P
ITPUB个人空间:^@7Q7x^]a
ITPUB个人空间3U#|1Uj6t+M ?9K@
  3    p_whole
;ITPUB个人空间$F"JN O6MuS(J/N

'}X8[g[5r6X&c:B0ITPUB个人空间,z0s)V+LE(LU)W
  
4  end;
z,}.x/B-@x8l0ITPUB个人空间V%U"PIk/U

_ HnnLznx0  
5  /
f6usTP{k0ITPUB个人空间!jVV"i*V)s)V+j

ITPUB个人空间'}Vt8Ei"M

M$yC%|4x'j9d|0 


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-11  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 20163
  • 日志数: 291
  • 图片数: 2
  • 建立时间: 2007-12-11
  • 更新时间: 2008-10-04

RSS订阅

Open Toolbar