exp导出excel oracle_如何从Oracle快速导出数据到Excel
【摘要】
在生產系統使用過程中,常常會有從數據庫中導出數據的需求。支持多種導出方式,例如使用spool、utl_file等內置方法導出,利用plsql developer、等第三方工具等。
【正文】
Oracle支持多種導出方式,包括自帶的工具包和第三方工具。不同工具有各自的適用場景,這里對常見的四種方案進行簡要分析:
一利用utl_file將執行結果導出為.csv文件
1.1方法描述
使用流程:
1、定義字段列表(根據實際情況增減字段);
2、定義目錄對象(如果沒有,需要先通過create directory創建);
3、定義輸出文件名稱(不用寫文件后綴名);
4、定義輸出表格標題(可自定義顯示的字段名);
5、設置執行的
6、映射字段列表(依次給字段賦值);
7、輸出每一行數據。
1.2操作演示
這里演示如何通過sqlplus工具將指定SQL語句的執行結果導出到.csv文件。
指定SQL:
select
OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, STATUS from
dba_objects;
說明:
dba_objects包含18萬行數據。
腳本內容:
--腳本內容開始---
--會話設置
SET
SERVEROUT ON;--打開輸出提示
SET
TIMING ON;--打開計時器
--定義變量
DECLARE
DIRPATHVARCHAR2(4000);--目錄對象
OUTFILEVARCHAR2(4000);--輸出文件名稱
VSFILEUTL_FILE.FILE_TYPE; --定義用于接收文件句柄的類型
V_CNTNUMBER;--統計每個文件加載行數
--定義字段列表
--根據實際情況增減字段,為了方便,可以采用Cn的定義方式,n為查詢結果的列數
C1VARCHAR2(4000);
C2VARCHAR2(4000);
C3VARCHAR2(4000);
C4VARCHAR2(4000);
C5VARCHAR2(4000);
C6VARCHAR2(4000);
BEGIN
--設置dbms_output輸出的緩沖大小
--DBMS_OUTPUT.ENABLE(1000000); -->避免報錯ORA-20000:
ORU-10027: BUFFER OVERFLOW, LIMIT OF 10000 BYTES
--定義目錄對象
DIRPATH:= 'EXPDATA'; --這里對應OS上的目錄“D:\expdata”
--定義輸出文件名稱
OUTFILE:= 'dba_objects';
--開始打開文件,這里使用DIRECTORY參數指定輸出文件的存放位置
VSFILE := UTL_FILE.FOPEN(DIRPATH, OUTFILE ||
'.CSV', 'W');
/*參數介紹:
UTL_FILE.FOPEN(LOCATION IN VARCHAR2, FILENAME
IN VARCHAR2, OPEN_MODE IN VARCHAR2) RETURN FILE_TYPE;
LOCATION是文件存放的DB目錄名稱,-------執行用戶要有對DIR目錄的讀寫權限
FILENAME是文件名,
OPEN_MODE是打開模式('R'是讀文本,'W'是寫文本,'A'是附加文本,參數不分大小寫,如果指定'A'但是文件不存在,它會用'W'先創建出來,'W'有覆蓋的功能)*/
--定義輸出表格標題
UTL_FILE.PUT_LINE(VSFILE,
'OWNER, OBJECT_NAME,
OBJECT_TYPE, CREATED, LAST_DDL_TIME, STATUS');
--每個文件加載行數[每次進入循環都賦值為0].排除標頭部分
V_CNT := 0;
--設置執行的SQL語句
--將FOR循環查詢的內容
FOR SQL_ IN (select OWNER, OBJECT_NAME,
OBJECT_TYPE, CREATED, LAST_DDL_TIME, STATUS from dba_objects) LOOP
--映射字段列表
C1:= SQL_.OWNER;
C2:= SQL_.OBJECT_NAME;
C3:= SQL_.OBJECT_TYPE;
C4:= SQL_.CREATED;
C5:= SQL_.LAST_DDL_TIME;
C6:= SQL_.STATUS;
--輸出每一行數據
/*UTL_FILE.PUT_LINE若需要EXCEL格式,需要每字段用逗號隔開,,WINDOWS EXCEL工具打開默認就是EXCEL格式*/
UTL_FILE.PUT_LINE(VSFILE,
C1 || ',' || C2 || ',' ||
C3 || ',' || C4 || ',' ||
C5 || ',' ||
C6);
--計數器,每一條數據都循環+1
V_CNT := V_CNT + 1;
END LOOP;
--打印每個文件LOAD ROWS
DBMS_OUTPUT.PUT_LINE( OUTFILE || '.CSV文件LOAD ROWS:' || V_CNT);
--放在LOOP后,否則報錯ORA-29282:文件ID無效/ORA-06512:在"SYS.UTL_FILE", LINE 878
--若不寫如下 強制輸出緩沖/關閉句柄,可能存在導出數據少于查詢條目
UTL_FILE.FFLUSH(VSFILE);
UTL_FILE.FCLOSE(VSFILE);
END;
--腳本內容結束---
上述腳本已經通過多次測試成功,且每一步都有詳細說明,用戶可根據實際的SQL語句進行設當調整即可實現數據導出到excel。
下面是執行成功截圖:
此時可在D:\expdata目錄下找到導出的.csv文件,如:
二利用plsql
developer將執行結果導出為.csv文件
2.1方法描述
先執行要查詢的SQL語句(執行完能看到有結果即可,無需顯示所有數據),然后點擊“export query result...”按鈕,選擇“CSV file”(或需要的文件類型),在彈出的對話框輸入文件名后點擊“保存”按鈕即可。
2.2操作演示
這里演示如何通過plsql
developer工具將指定SQL語句的執行結果導出到.csv文件。
指定SQL:
select
OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, STATUS from
dba_objects;
說明:
dba_objects包含18萬行數據。
導出完成后可在指定的目錄下找到導出的.csv文件。
三利用excel連接數據庫進行導出
3.1方法描述
Excel可通過ODBC驅動直接寫SQL語句查詢Oracle中數據。
3.2操作演示
這里演示如何通過excel連接數據庫進行數據導出。
3.2.1配置ODBC數據源
開始->控制面板->系統和安全->管理工具->ODBC數據源(可根據自己的情況選擇32位還是64位)。
因安裝的是Oracle
11.2.0.4 64位,故選擇ODBC數據源(64位),顯示如下:
進入Oracle ODBC配置項,需要填寫的有四項:
Data Source Name:其實就是給該數據源取一個名字,在本例中我取的是“test”。
Description:對該數據源的描述,可寫可不寫。
TNS Service Name:即網絡服務名,這個是在Oracle客戶端tnsnames.ora中定義,這里的是“excel_to_oracle”。
tnsnames.ora中對應的內容可能如下:
excel_to_oracle
=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 182.17.6.5)(PORT
= 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
User ID:用戶名,該用戶必須對所查詢的表有可讀權限。
3.2.2在Excel中進行查詢操作
注:這里的Excel版本是2016。
2.1、數據->獲取外部數據->自其他來源->來自Microsof Query,如圖所示:
2.2、選擇數據源“test”,點擊“確認”。
2.3、輸入scott用戶的密碼,點擊“OK”。
這里可能會卡一會兒
2.4、選擇需要操作的表:
2.5、可根據實際情況篩選數據,這里直接下一步:
2.6、可根據實際情況進行排序,這里直接下一步:
2.7、將數據返回microsoft excel,完成設置:
2.8、在最后彈出的對話框設置好顯示方式和放置位置,點擊確定即可下:
可以看到數據已顯示到excel表格中:
如果在microsoft
query中進行操作,可以點擊如下圖的按鈕將數據返回到excel:
最后,可通過excel保存查詢數據。
四利用spool打印數據到指定文件
4.1方法描述
在sqlplus工具中通過spool命令可保存sql執行結果到指定文件。
4.2操作演示
這里演示如何通過spool格式化輸出scott用戶下的tab表數據并保存到指定文件。
conn scott
--輸入口令:
--已連接。
--格式化輸出結果
set
linesize 200
set term
off verify off feedback off pagesize 6000
set markup
html on entmap ON spool on preformat off
--利用spool命令說明生成的xls表的名稱
spool
D:\expdata\tables.xls
--執行查詢語句
select *
from tab;
--保存文件
spool off
exit
導出完成后可在指定的目錄下找到導出的.xls文件,如:
總結
以上是生活随笔為你收集整理的exp导出excel oracle_如何从Oracle快速导出数据到Excel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android读取excel文件_pyt
- 下一篇: 4固定在底部_礼堂椅厂家教你如何固定座椅