課程
/數(shù)據(jù)庫
/Oracle
/Oracle數(shù)據(jù)庫開發(fā)利器之函數(shù)
請問oracle導(dǎo)出表數(shù)據(jù)到excle中的腳本語句咋寫的?
2016-05-14
源自:Oracle數(shù)據(jù)庫開發(fā)利器之函數(shù) 4-1
正在回答
無法直接保存到excel中,但是可以保存到csv文件,同樣是excel的格式,方法如下:譬如要把文件生成在d盤下的test目錄下:1,在d盤根目錄下新建test目錄 2,sqlplus以system用sysdba登錄3,create or replace directory TMP as ’d:\test’;4,grant read on directory TMP to user; 5,alter system set utl_file_dir='d:\test' scope=spfile;然后建立存儲過程,表是隨便建了一個,最后的文件名按要求需要按照當(dāng)前日期的前一天生成,所以后邊文件名的地方write_file_name處就按照要求來了create or replace PROCEDURE SP_OUTPUT(on_flag ? ? ?OUT ? ? ?NUMBER,out_reason ? OUT ? ? ?VARCHAR2)isv_code ? ? ? ? ?number;v_text ? ? ? ? ?varchar2(255);file_handle utl_file.file_type;Write_content VARCHAR2(1024);Write_file_name VARCHAR2(50);v_aaa varchar2(5);v_bbb varchar2(5);cursor cur_sp_outisselect aaa,bbbfrom aaa;beginopen cur_sp_out;loop ? ?fetch cur_sp_out into ? v_aaa,v_bbb; ? ?exit when cur_sp_out%notfound; ? ?write_file_name := to_char(SYSDATE,'YYYYMMDD')||'.xls'; ? ? ? ? ? ? ? ? ? ? ? ? ? ? file_handle := utl_file.fopen('TMP',write_file_name,'a'); ? ? ? ? ? ? ? ? ? ? ? ? ? ? write_content := v_aaa||' '||v_bbb; ? ? ? ? ? ? ? ? ? ? ? ? ? ?--write file ? ? ? ? ? ? ? ? ? ? ? ? ? ? IF utl_file.is_open(file_handle) THEN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?utl_file.put_line(file_handle,write_content); ? ? ? ? ? ? ? ? ? ? ? ? ? ?END IF; ? ? ? ? ? ? ? ? ? ? ? ? ? ?--close file ? ? ? ? ? ? ? ? ? ? ? ? ? ?utl_file.fclose(file_handle); ? ?end loop; ? ?close cur_sp_out; ? v_code := 0;v_text := '完成';exceptionwhen others thenon_flag := SQLCODE; ? ?out_reason := SQLERRM; ? ?begin ? ?IF utl_file.is_open(file_handle) THEN ? ?utl_file.fclose(file_handle); ? ?end IF; ? ?end; ? ?rollback;end;這樣基本就完成了,但是建立完畢后需要重啟數(shù)據(jù)庫,否則文件寫不進(jìn)指定的目錄下需要注意的是: write_content := v_aaa||' '||v_bbb; ? 這個位置v_aaa|| 和v_bbb中間引號的地方是TAB符,否則輸出來的XLS文件中,會把這些字符串合在一個單元格中。
舉報
常用函數(shù)應(yīng)用,并且介紹了這些函數(shù)如何在查詢中應(yīng)用
3 回答數(shù)據(jù)庫連接
2 回答Oracle數(shù)據(jù)類型轉(zhuǎn)換
1 回答本地安裝了oracle客戶端,統(tǒng)計數(shù)據(jù)時如果你能從客戶端上上傳一組數(shù)據(jù)用SQL統(tǒng)計數(shù)據(jù)就特別方便了,這個該如何操作呢,客戶端是developer
3 回答這門課在數(shù)據(jù)庫學(xué)習(xí)的重要性怎么樣啊
2 回答函數(shù)的分類
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-05-20
無法直接保存到excel中,但是可以保存到csv文件,同樣是excel的格式,方法如下:
譬如要把文件生成在d盤下的test目錄下:
1,在d盤根目錄下新建test目錄
2,sqlplus以system用sysdba登錄
3,create or replace directory TMP as ’d:\test’;
4,grant read on directory TMP to user;
5,alter system set utl_file_dir='d:\test' scope=spfile;
然后建立存儲過程,表是隨便建了一個,最后的文件名按要求需要按照當(dāng)前日期的前一天生成,所以后邊文件名的地方write_file_name處就按照要求來了
create or replace PROCEDURE SP_OUTPUT
(
on_flag ? ? ?OUT ? ? ?NUMBER,
out_reason ? OUT ? ? ?VARCHAR2)
is
v_code ? ? ? ? ?number;
v_text ? ? ? ? ?varchar2(255);
file_handle utl_file.file_type;
Write_content VARCHAR2(1024);
Write_file_name VARCHAR2(50);
v_aaa varchar2(5);
v_bbb varchar2(5);
cursor cur_sp_out
is
select aaa,bbb
from aaa;
begin
open cur_sp_out;
loop
? ?fetch cur_sp_out into ? v_aaa,v_bbb;
? ?exit when cur_sp_out%notfound;
? ?write_file_name := to_char(SYSDATE,'YYYYMMDD')||'.xls';
? ? ? ? ? ? ? ? ? ? ? ? ? ? file_handle := utl_file.fopen('TMP',write_file_name,'a');
? ? ? ? ? ? ? ? ? ? ? ? ? ? write_content := v_aaa||' '||v_bbb;
? ? ? ? ? ? ? ? ? ? ? ? ? ?--write file
? ? ? ? ? ? ? ? ? ? ? ? ? ? IF utl_file.is_open(file_handle) THEN
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?utl_file.put_line(file_handle,write_content);
? ? ? ? ? ? ? ? ? ? ? ? ? ?END IF;
? ? ? ? ? ? ? ? ? ? ? ? ? ?--close file
? ? ? ? ? ? ? ? ? ? ? ? ? ?utl_file.fclose(file_handle);
? ?end loop;
? ?close cur_sp_out;
? v_code := 0;
v_text := '完成';
exception
when others then
on_flag := SQLCODE;
? ?out_reason := SQLERRM;
? ?begin
? ?IF utl_file.is_open(file_handle) THEN
? ?utl_file.fclose(file_handle);
? ?end IF;
? ?end;
? ?rollback;
end;
這樣基本就完成了,但是建立完畢后需要重啟數(shù)據(jù)庫,否則文件寫不進(jìn)指定的目錄下
需要注意的是: write_content := v_aaa||' '||v_bbb; ? 這個位置
v_aaa|| 和v_bbb中間引號的地方是TAB符,否則輸出來的XLS文件中,會把這些字符串合在一個單元格中。