学习oracle技术,每天学一点,每天进步一点
用存储过程把表里的数据导成insert语句
上一篇 /
下一篇 2008-06-11 21:25:04
/ 个人分类:pl/sql
SQL> show parameters utl_file_dir;
ub+Tx!FE&BT0ITPUB个人空间3v#{eh6gL可以看到该参数的当前设置。
ITPUB个人空间"DZ&k%?5b(l}6Oq(~~#wf^/Rfhi)z0如果没有值,必须修改
数据库的initsid.ora文件,将utl_file_dir 指向一个你想用PL/SQL file I/O 的路径。
ITPUB个人空间^
_bQ m7i0l.]+l重新启动数据库。此参数才生效。
#`N
oMAuD0+Cj3W b^O \0调用它,可以把表里的数据生成(insert into 表名 ....)OS下文件的过程genins_file方法:
0uL!j-];bU0r)K8bhW!U},C0 SQL>exec genins_file('
emp','/oracle/logs','insert_emp.sql');
H"?sbUh
Z0 | | |ITPUB个人空间)N S0r xnv8ALdI Q
表名,可变 | 生成OS下文件名,可变 ITPUB个人空间p?+i-U3_
{A3R
|ITPUB个人空间;KT0Je+m1? R5w
utl_file_dir路径名,不变(我设置的是/oracle/logs)
/aX:knL^L0
'R-N]-Vi-?(D._8_*@&Z|0存储过程原码
'xSvt_0cw){0CREATE OR REPLACE PROCEDURE genins_file(ITPUB个人空间4Tq\xP\4A
p_table IN varchar2,
v;t'~;CDt'd
A0p_output_folder IN VARCHAR2,ITPUB个人空间7q:f ](v!y4a:C
p_output_file IN VARCHAR2)ITPUB个人空间:bk5pfD!dE
IS
[8J8J| K
C+t0 --
W?(w@az,w?+C7z0 l_column_list VARCHAR2(32767);
?v{9\.j0E0 l_value_list VARCHAR2(32767);ITPUB个人空间yV+lFP7o5\f
?z
l_query VARCHAR2(32767);
T@ k5SK6~C0 l_cursor NUMBER;
RZ\-l
a(cw0 ignore NUMBER;ITPUB个人空间,q3S/k.Qi;K'FN+}
I$P)U1L
l_insertline1 varchar2(32767);
)x f k%d2yHN0 l_insertline2 varchar2(32767); ITPUB个人空间*rPh(rj(K4EQ
cmn_file_handle UTL_FILE.file_type;
4IDA[,Ou0 --ITPUB个人空间3?*J"P1M$xj
FUNCTION get_cols(p_table VARCHAR2)ITPUB个人空间p)IjrU
RETURN VARCHAR2ITPUB个人空间+Sk,J%w6VX9Z
IS
W5q`.q_0O}0 l_cols VARCHAR2(32767);
u }5?;Py(ch0 CURSOR l_col_cur(c_table VARCHAR2) IS
l!w#a]7w
hw0 SELECT column_name
:yT6c"Tk0 FROM user_tab_columns
)\]vHVmx|&v#_0 WHERE table_name = upper(c_table)ITPUB个人空间Jv`kvTz
ORDER BY column_id;ITPUB个人空间g Q(|#M:b;Is0]2u
BEGIN
GH!_4TMAU0 l_cols := null;
vVc,go0\.SL0 FOR rec IN l_col_cur(p_table)
L%ab3pOX{0 LOOP
7J@lB.f,|D!Ci#b0 l_cols := l_cols || rec.column_name || ',';
a&^G+Cn8y0 END LOOP;ITPUB个人空间9^){8d%{"Z"MZ2W4]
RETURN substr(l_cols,1,length(l_cols)-1);
:D9|;w!ZZv]yG{x0 END;
+p
w.]&F:u.TxP0 --
C2g*}$Mom0 FUNCTION get_query(p_table IN VARCHAR2)ITPUB个人空间q6?:jM
ih
RETURN VARCHAR2
$aV7G0B!I/n&F]0 IS
'd6rk0U%Mu m,e$i0 l_query VARCHAR2(32767);ITPUB个人空间R's!h3[``L
CURSOR l_query_cur(c_table VARCHAR2) ISITPUB个人空间2~5Lu&i [~"y:H*_
SELECT 'decode('||column_name||',null,''null'','||
d|0l\9G0iQ0 decode(data_type,'VARCHAR2','''''''''||'||column_name ||'||'''''''''ITPUB个人空间l:js;\+P
,'DATE','''''''''||to_char('||column_name||',''YYYY-MM-DD HH24:MI:SS'')||'''''''''
y,l(}FkU?0 ,column_name
)R
c7]+ed"A0 ) || ')' column_queryITPUB个人空间^$q1BD Y)l I
FROM user_tab_columns
,Ln*AD[Y"]
W0 WHERE table_name = upper(c_table)ITPUB个人空间Y/uS(j,H(i,g1Nm3BP
ORDER BY column_id;ITPUB个人空间7C
[7jYH!S
s1?O
BEGINITPUB个人空间9YEnk4@.j
l_query := 'SELECT ';
7o:T'i BK&o(A ?0 FOR rec IN l_query_cur(p_table)ITPUB个人空间HQ"T5i0k;Ha8W[d
LOOPITPUB个人空间3I u2`!^W
hM3lc
l_query := l_query || rec.column_query || '||'',''||';ITPUB个人空间/m
VMRm)g8Q1h4C8N,wbs
END LOOP;
/v7yen!xxK3p^#H0 l_query := substr(l_query,1,length(l_query)-7);
DGh'vhe*l0 RETURN l_query || ' FROM ' || p_table;
I%cYd7i3W2N/tBj0 END;
;cKW?
qB0 --ITPUB个人空间'kI;w8z.t9Cdj/xi%]
BEGIN
ZaJy&W mR"Tu"pL0 l_column_list := get_cols(p_table);
,@wg5T#\c L\D~0 l_query := get_query(p_table);
O6smnM0 l_cursor := dbms_sql.open_cursor;
'jt8vE2GQo4F`0 DBMS_SQL.PARSE(l_cursor, l_query, DBMS_SQL.native);
s.]
m?;PWMl-[ u8B0 DBMS_SQL.DEFINE_COLUMN(l_cursor, 1, l_value_list, 32767);
)hk;??1e3a1x;]0 ignore := DBMS_SQL.EXECUTE(l_cursor);ITPUB个人空间*Lz`%^"[/qIg
--
e7O;eS
b0 IF NOT UTL_FILE.IS_OPEN(cmn_file_handle) THENITPUB个人空间K3n:n4F5h
cmn_file_handle := UTL_FILE.FOPEN (p_output_folder, p_output_file, 'a',32767);
/w.ov1p[H bYf0 END IF;
jI,?o5_X6~0 ITPUB个人空间/y xL&`#hLG
LOOP
`3cZMwY9@}#]'n r0 IF DBMS_SQL.FETCH_ROWS(l_cursor)>0 THENITPUB个人空间5si~q7^R;X@]Du:p*@
DBMS_SQL.COLUMN_VALUE(l_cursor, 1, l_value_list);
XV^X F$UL0 l_insertline1:='INSERT INTO '||p_table||' ('||l_column_list||')';ITPUB个人空间y wX.g*U*?'S{'o
l_insertline2:=' VALUES ('||l_value_list||');';
ACB6yInDC'F0 UTL_FILE.put_line (cmn_file_handle, l_insertline1);ITPUB个人空间ZOe})u,|)j
UTL_FILE.put_line (cmn_file_handle, l_insertline2);ITPUB个人空间%o C)Q,RY%w#S
ELSE
5[nN8]*Eelzc'bm0 EXIT;
;V+c/d.^%TZ A.O5y0 END IF;ITPUB个人空间;@o0D\rA1r|
END LOOP;ITPUB个人空间|2{.j5zX#Q-F*\ B
IF NOT UTL_FILE.IS_OPEN(cmn_file_handle) THENITPUB个人空间gf
i:I\
T
UTL_FILE.FCLOSE (cmn_file_handle);ITPUB个人空间6z$t yK3C];b
END IF;
DK0v]y#kR*c0END;
;MA)F/S/o@,Z*~0/
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: