使用 Oracle sqlplus 將查詢結果匯出到檔案

小蛙又遇到不能用 GUI 來管理 Oracle 的專案了,其實跟 2012 年的時候遇到的這個是相同的專案(Oracle 使用 sqlplus 匯入 SQL 檔案),該篇記錄了怎麼把一堆要執行的 SQL 指令存入檔案中,並於 Oracle sqlplus 載入檔案執行,這篇文章為反向動作,將查詢的結果輸出到檔案內。

這個專案的環境很麻煩,在一個需要透過 VPN 連進去的內部環境,連上 VPN 之後就 … 斷網了,完全沒辦法對外,沒辦法 Google 查資料,對小蛙這種不專精的半調子來說存在一定難度,幸好有強大的同仁用 VM 的特殊大絕解決這問題,不過 VM 裡面連上 VPN 還是不能上網,但總算可以在本機 Google 資料,再手動把指令或語法手動輸入進去,對,沒錯,沒辦法複製貼上 Orz …

囉嗦一堆,進正題

set colsep ,
set headsep off
set pagesize 0
set linesize 10000
set trimspool on
set echo off

spool /home/hans/output

select * from image;

spool off

上面那些指令是參考 StackOverflow 多個答案來的,有些實際上在做什麼小蛙也不是很了解,但還是可以猜出大概是什麼,例如:colset 是設定欄位間的分隔符號(其他詳細設定請自行 Google)。小蛙遇到有問題的地方是 linesize 沒有設定,導致匯出的每一行都被切斷在莫名其妙的地方。其他 spool 輸出檔案路徑select * from image; 要匯出結果的查詢 … 等等。

這指令已符合小蛙的需求,先備存,之後有其他需求再去查詳細的資料。以下是小蛙自己留存用的

// 相當於 mysql show tables;
select table_name from user_tables;

// 查找排序過的前 10 筆 (Top 10)
select rownum, t.* from ( 實際要運作的 SQL ) t where rownum < 10;

// 列出表格的所有欄位
select * from user_tab_columns A where A.table_name = 'IMAGE';
// 列出名稱、類型及長度
select column_name, data_type, default_length from user_tab_columns A where A.table_name = 'IMAGE';

// 複製 table 內所有資料
create table image_backup as select * from image;

// 表格建立的時間
select object_name, created, TIMESTAMP from user_objects where object_name = 'IMAGE';

// 修改表格
alter table IMAGE modify (file_name varchar2(300), index_term varchar2(1000));

// 格式變動完成
commit;

Oracle 系列文章:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。