使用 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 系列文章: