如何实现一个功能,将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
`m y$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 {UT K|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-ASv6{_*h?0lX+{
jUa s
VMQM0
6U.LQ6UL'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个人空间&[ Y4M8P s#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
SQL> begin
&y%L.}YL$||0ITPUB个人空间w9U9ag
{1Ko