key words: plsql,導(dǎo)出數(shù)據(jù),大數(shù)據(jù)量
最近的賬務(wù)的項(xiàng)目中需要導(dǎo)出Excel報(bào)表,數(shù)據(jù)量比較大,解決方案如下 :
1.通過(guò)plsql在服務(wù)器端查詢出符合要求的紀(jì)錄,然后直接寫到文本文件中
2.在web端通過(guò)流的方式讀文本文件,通過(guò)POI寫到Excel,將生成的Excel流寫到respoonse實(shí)現(xiàn)下載
這樣做的好處是不必一次性將滿足條件的紀(jì)錄全部取出來(lái),而是通過(guò)流的方式.
這個(gè)方式原來(lái)在處理Blob類型的字段時(shí)有直接的getStream來(lái)支持的,這次普通的數(shù)據(jù)只好通過(guò)文件的方式來(lái)實(shí)現(xiàn).
貼一段sample的代碼
sql 代碼
- create or replace procedure alex_table_to_txt(filepath varchar2,filename varchar2) is
-
- v1 alex2.name%type;
- v2 alex2.address%type;
- v3 alex2.groupname%type;
-
- output varchar2(200);
-
-
- file_handle UTL_FILE.FILE_TYPE;
-
- cursor readtable is select t.name,t.address,t.groupname from alex2 t;
- begin
- file_handle:=utl_file.fopen(filepath,filename,'w',6000);
- open readtable;
-
- loop
- fetch readtable into v1,v2,v3;
- exit when readtable%notfound;
- output:=v1 || ',' || v2 || ',' || v3 ;
- utl_file.put_line(file_handle,output);
-
- end loop;
-
- close readtable;
- utl_file.fclose(file_handle);
- end alex_table_to_txt;
- /
歡迎討論你的方案