前言:
此时看官们对“oraclesql输出文件”都比较关怀,各位老铁们都想要学习一些“oraclesql输出文件”的相关内容。那么小编在网上汇集了一些有关“oraclesql输出文件””的相关资讯,希望同学们能喜欢,看官们一起来学习一下吧!使用Oracle的存储过程导出某张表的数据到文本
前言
某天接到一个小需求,导出oracle某张表的数据到文本,要求表的数据结构未知(其实想多张表导出哈),如果不考虑效率、导出一张表还是很容易的,写一条sql差不多就行了,所以想到了用utl_file写个存储过程实现,网上百度了一下并没有直观的参考资料,于是决定将自己整理的干货代码分享给大家。
上代码:
图片版(为了手机上更好的阅读提供了图片版)
代码版(手机排版乱但可以直接粘贴做测试)
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输出文件