龙空技术网

使用Oracle的存储过程导出某张表的数据到文本

程序员的成长之路 565

前言:

此时看官们对“oraclesql输出文件”都比较关怀,各位老铁们都想要学习一些“oraclesql输出文件”的相关内容。那么小编在网上汇集了一些有关“oraclesql输出文件””的相关资讯,希望同学们能喜欢,看官们一起来学习一下吧!

使用Oracle的存储过程导出某张表的数据到文本

前言

某天接到一个小需求,导出oracle某张表的数据到文本,要求表的数据结构未知(其实想多张表导出哈),如果不考虑效率、导出一张表还是很容易的,写一条sql差不多就行了,所以想到了用utl_file写个存储过程实现,网上百度了一下并没有直观的参考资料,于是决定将自己整理的干货代码分享给大家。

上代码:

图片版(为了手机上更好的阅读提供了图片版)

使用Oracle的存储过程导出某张表的数据到文本

代码版(手机排版乱但可以直接粘贴做测试)

createorreplaceprocedure dump_data_to_file(tbName invarchar2,

p_code out integer,

p_err out varchar2) is

outfile utl_file.file_type;

v_col varchar2(4000);

v_sql varchar2(4000);

row_result varchar2(4000);

c1 sys_refcursor;

begin

for c_col in (select column_name from user_tab_columns where table_name=tbName order by column_id)

--for循环游标,列名和等号“=”后面可以使用变量,但是sql本体无法使用变量,即无法使用动态sql,想用的话得使用open for游标语法。

loop

v_col:=v_col||'||chr(44)||'||c_col.column_name; --输出列名,chr(44)为逗号的ascii码

end loop;

v_sql := 'select '||substr(v_col,12)||' from '||tbName; --输出sql的字符串,用substr函数格式化输出,v_tab变量在这里带入,控制表名

outfile := utl_file.fopen('UTL_EXP_TEST',tbName||'.sql','w'); //UTL_EXP_TEST : 定义好的目录

open c1 for v_sql;

loop

fetch c1 into row_result;

exit when c1%notfound;

utl_file.put_line(outfile,row_result);

end loop;

close c1;

utl_file.fclose(outfile);

exception

when others then

p_code := sqlcode;

p_err := sqlerrm;

end dump_data_to_file;

测试

需要输入想要导出的tbName表名即可, 后续可以改进导出所有表或指定多张表导出(需要自己动手尝试哈~,本次只是抛砖引玉)。

感言

方式千千万,分享给需要的童鞋们,共勉~~~

标签: #oraclesql输出文件