utl_file导出的文件大小受了限制,怎么解决?/急 我用utl_file把表中的数据导出到EXCEL中,但文件大小好像限制在3M,我怎么做才能扩大这个限制? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是可以导出的,utl_file.put(file in file_type,buffer in varchar2);是将缓冲区内容写入到文件中。如果报错说文件大小不够,可能是你缓冲区大小不合适,你可以设置大点,dbms_output.enable(32768);put有最大长度32768限制,快到这个值就需要flush一下;然后用utl_file.new_line(file);结束一行。主要是就跟缓冲区有关系,应该是自动分配的 错了,应该限制的是33K,我所有的导出都是超过33K的都不出来了> 看看我刚发表的blog吧:http://blog.csdn.net/gelyon/archive/2010/12/01/6048662.aspx 网上研究了下,回来发现1楼的好眼熟,小鄙视下.楼主可以尝试在倒出过程中隔一会就执行下 alter system flush shared_pool;或者alter system flush buffer_cache; 用PLSQL是不是就不需要这些了啊,好像记得能直接把表导成EXCEL吧 developer 有自带的工具直接导出还是一样的啊 7楼到底是指用PLSQL就不会考虑这大小 限制了,还是说也会有大小限制? 迷茫 存储过程:CREATE OR REPLACE PROCEDURE SP_ItemMasterInfoasTYPE job_record_type is RECORD(imitm proddta.f4101.imitm%TYPE,imlitm proddta.f4101.imlitm%TYPE,imdsc1 proddta.f4101.imdsc1%TYPE,imsrp1 proddta.f4101.imsrp1%TYPE,imrvno proddta.f4101.imrvno%TYPE,imuom1 proddta.f4101.imuom1%TYPE,imglpt proddta.f4101.imglpt%TYPE,imstkt proddta.f4101.imstkt%TYPE,imlnty proddta.f4101.imlnty%TYPE,imsld proddta.f4101.imsld%TYPE,imltlv proddta.f4101.imltlv%TYPE,imacq proddta.f4101.imacq%TYPE,immlq proddta.f4101.immlq%TYPE,immtf1 proddta.f4101.immtf1%TYPE,imuser proddta.f4101.imuser%TYPE);job_rec job_record_type;CURSOR c_jobs IS select imitm,imlitm,imdsc1,imsrp1,imrvno,imuom1,imglpt,imstkt,imlnty,imsld,imltlv,imacq,immlq,immtf1,imuser from proddta.f4101 --where imitm=963order by imitm; l_file utl_file.file_type;BEGIN l_file :=utl_file.fopen('DIR_EXPORT','ItemMaster-W.xls','w'); utl_file.put(l_file,'Short_Item');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'Item');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'Description');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'imsrp1');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'imrvno');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'imuom1');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'imglpt');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'imstkt');utl_file.put(l_file,CHR(9)); utl_file.put(l_file,'imlnty');utl_file.put(l_file,CHR(9));utl_file.put(l_file,'imsld');utl_file.put(l_file,CHR(9));utl_file.put(l_file,'imltlv');utl_file.put(l_file,CHR(9));utl_file.put(l_file,'imacq');utl_file.put(l_file,CHR(9));utl_file.put(l_file,'immlq');utl_file.put(l_file,CHR(9));utl_file.put(l_file,'immtf1');utl_file.put(l_file,CHR(9));utl_file.put(l_file,'imuser');utl_file.put(l_file,CHR(9));utl_file.put(l_file,CHR(10)); OPEN c_jobs; LOOP FETCH c_jobs INTO job_rec.imitm,job_rec.imlitm,job_rec.imdsc1,job_rec.imsrp1,job_rec.imrvno,job_rec.imuom1, job_rec.imglpt,job_rec.imstkt,job_rec.imlnty,job_rec.imsld,job_rec.imltlv,job_rec.imacq,job_rec.immlq,job_rec.immtf1,job_rec.imuser; EXIT WHEN c_jobs%NOTFOUND; utl_file.put(l_file,job_rec.imitm );utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imlitm);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imdsc1);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imsrp1);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imrvno);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imuom1);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imglpt);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imstkt);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imlnty);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imsld);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imltlv);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imacq);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.immlq);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.immtf1);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,job_rec.imuser);utl_file.put(l_file,CHR(9)); utl_file.put(l_file,CHR(10)); END LOOP; CLOSE c_jobs; utl_file.fflush(l_file); utl_file.fclose(l_file); EXCEPTION WHEN others THEN IF utl_file.is_open(l_file) THEN utl_file.fclose(l_file); END IF; END; oracle设置归档模式的问题 oracle分页查询效率问题探讨 数据库数据表的内部结构是什么呀,是不是一个结构体数组呀? 这个SQL语句该怎么改? 为什么PL/SQL用一段时间就会断线? 请教一SQL语句 救命!配置MicroSoft ODBC for Oracle问题 高分求一条sql语句,谢谢,在线等!!! 如何知道一句SQL语句需要执行多久? oracle 中 clob 字段的问题.在线等 这个触发器有错吗? 查询
utl_file.put(file in file_type,buffer in varchar2);
是将缓冲区内容写入到文件中。如果报错说文件大小不够,可能是你缓冲区大小不合适,你可以设置大点,dbms_output.enable(32768);
put有最大长度32768限制,快到这个值就需要flush一下;
然后用utl_file.new_line(file);结束一行。
主要是就跟缓冲区有关系,应该是自动分配的
楼主可以尝试在倒出过程中隔一会就执行下 alter system flush shared_pool;或者alter system flush buffer_cache;
CREATE OR REPLACE PROCEDURE SP_ItemMasterInfo
as
TYPE job_record_type is RECORD
(imitm proddta.f4101.imitm%TYPE,
imlitm proddta.f4101.imlitm%TYPE,
imdsc1 proddta.f4101.imdsc1%TYPE,
imsrp1 proddta.f4101.imsrp1%TYPE,
imrvno proddta.f4101.imrvno%TYPE,
imuom1 proddta.f4101.imuom1%TYPE,
imglpt proddta.f4101.imglpt%TYPE,
imstkt proddta.f4101.imstkt%TYPE,
imlnty proddta.f4101.imlnty%TYPE,
imsld proddta.f4101.imsld%TYPE,
imltlv proddta.f4101.imltlv%TYPE,
imacq proddta.f4101.imacq%TYPE,
immlq proddta.f4101.immlq%TYPE,
immtf1 proddta.f4101.immtf1%TYPE,
imuser proddta.f4101.imuser%TYPE
);
job_rec job_record_type;
CURSOR c_jobs IS
select imitm,imlitm,imdsc1,imsrp1,imrvno,imuom1,imglpt,imstkt,imlnty,imsld,imltlv,imacq,immlq,immtf1,imuser from
proddta.f4101 --where imitm=963
order by imitm;
l_file utl_file.file_type;
BEGIN
l_file :=utl_file.fopen('DIR_EXPORT','ItemMaster-W.xls','w');
utl_file.put(l_file,'Short_Item');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'Item');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'Description');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imsrp1');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imrvno');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imuom1');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imglpt');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imstkt');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imlnty');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imsld');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imltlv');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imacq');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'immlq');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'immtf1');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,'imuser');
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,CHR(10)); OPEN c_jobs;
LOOP
FETCH c_jobs INTO job_rec.imitm,job_rec.imlitm,job_rec.imdsc1,job_rec.imsrp1,job_rec.imrvno,job_rec.imuom1,
job_rec.imglpt,job_rec.imstkt,job_rec.imlnty,job_rec.imsld,job_rec.imltlv,job_rec.imacq,job_rec.immlq,job_rec.immtf1,job_rec.imuser;
EXIT WHEN c_jobs%NOTFOUND;
utl_file.put(l_file,job_rec.imitm );
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imlitm);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imdsc1);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imsrp1);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imrvno);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imuom1);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imglpt);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imstkt);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imlnty);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imsld);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imltlv);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imacq);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.immlq);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.immtf1);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,job_rec.imuser);
utl_file.put(l_file,CHR(9));
utl_file.put(l_file,CHR(10));
END LOOP;
CLOSE c_jobs;
utl_file.fflush(l_file);
utl_file.fclose(l_file);
EXCEPTION
WHEN others THEN
IF utl_file.is_open(l_file) THEN
utl_file.fclose(l_file);
END IF;
END;