oracle utl_file包相信大家都有一定的了解,下面为您介绍的是oracle utl_file包读取数据的实现方法,如果您对oracle utl_file包方面感兴趣的话,不妨一看。
createorreplacedirectoryMY_DIRas'/usr/test/'; createorreplacefunctionf_exportTxt( --传入参数 i_queryinvarchar2, i_separatorinvarchar2, i_dirinvarchar2, i_filenameinvarchar2 )returnnumber is /** **函数名:f_exportTxt **参数:1.i_query查询sql语句;2.i_separator分隔符,默认为','; **3.i_dir存放目录;4.i_filename文件名,默认在文件名前加上yyyymmddhh24mi **返回:大于等于0即为写入文件记录数,负为异常 **功能:用户数据抽取,并生成文件到指定目录下 **备注: **作者:lingo **修改日期:2010-04-15 **/ --定义参数 v_fileutl_file.file_type; v_theCursorintegerdefaultdbms_sql.open_cursor; v_columnValuevarchar2(2000);--临时(列值) v_colCntnumberdefault0;--列总数 v_separatorvarchar2(10)default',';--分隔符,默认为#@ v_cntnumberdefault0;--记录总数 v_filenamevarchar2(100);--时间 v_statusinteger;--执行SQL后返回状态值 v_countnumberdefault10000;--每次查询的数量,大于该数量则多次读取数据到游标 v_tmpnumber;--临时(总记录数,通过SQL统计算出,假如v_cnt不等于v_tmp,则导出有误) v_sqlvarchar2(2000);--组合sql语句 v_loopsnumber;--循环次数 begin --selectto_char(sysdate,'yyyymmddhh24mi')intov_filenamefromdual;--取时间年月日时分做文件名前缀 v_filename:=''; v_filename:=v_filename||i_filename;--组建文件名 v_sql:='selectcount(''x'')from('||i_query||')';--统计总数 executeimmediatev_sqlintov_tmp; selecttrunc(v_tmp/v_count)intov_loopsfromdual;--循环次数 ifmod(v_tmp,v_count)>0then v_loops:=v_loops+1; endif; v_file:=utl_file.fopen(i_dir,v_filename,'W');--打开文件 foriin1..v_loopsloop v_sql:='select*from(selectm.*,rownumrfr......
相关文章
标签:Oracle