利用 SQL*Plus 的報表格式化功能,通過設置列分隔符、頁面大小、抬頭抑制等參數,將查詢結果導向文本文件。需注意 SPOOL 輸出可能包含空行,後續需清理。
-- 測試表構建
CREATE TABLE TESTINOUT(ID NUMBER(10), USERNAME VARCHAR2(10), DATE1 DATE, MONEY NUMBER(6,2));
INSERT INTO TESTINOUT VALUES(1,'will',TO_DATE('29-12-2001','dd-mm-yyyy'),33.33);
INSERT INTO TESTINOUT VALUES(2,'ddxxkk',TO_DATE('29-12-2002','dd-mm-yyyy'),443.33);
INSERT INTO TESTINOUT VALUES(1234567890,'thisistest',TO_DATE('29-12-2002','dd-mm-yyyy'),4443.33);
-- 導出腳本 testinout.sql
SET COLSEP '' -- 列分隔符設為空
SET TRIMSPOOL ON -- 去除尾部空格
SET LINESIZE 120 -- 行寬
SET PAGESIZE 2000 -- 頁大小,防止分頁換行
SET NEWPAGE 1 -- 新頁控制
SET HEADING OFF -- 隱藏列標題
SET TERM OFF -- 關閉終端顯示
COLUMN ID FORMAT A10 TRUNCATE
COLUMN MONEY FORMAT A6 TRUNCATE
SPOOL d:\iii.lst
SELECT TO_CHAR(ID,'0000000009S') AS ID,
USERNAME,
TO_CHAR(DATE1,'yyyymmdd') AS DATE1,
TO_CHAR(MONEY*100,'000000S') AS MONEY
FROM TESTINOUT;
SPOOL OFF
EXIT;
| 命令 | 說明 | 默認值 |
|---|---|---|
| SET COLSEP | 列分隔符 | 單空格 |
| SET TRIMSPOOL | 移除 SPOOL 輸出行尾空格 | OFF |
| SET LINESIZE | 輸出行寬(1-32767),漢字佔 2 字符 | 80 |
| SET PAGESIZE | 每頁行數(0-50000),0 為不分頁 | 24 |
| SET HEADING | 是否顯示列標題 | ON |
| SET NEWPAGE | 新頁前空行數,0 為換頁符 | 1 |
| SET TERM | 終端顯示開關 | ON |
系統自動跳過空行。
LOAD DATA
INFILE 'd:\iii.lst'
APPEND
INTO TABLE TESTINOUT
(
ID POSITION(01:10) INTEGER EXTERNAL,
USERNAME POSITION(11:20) CHAR,
DATE1 POSITION(21:28) DATE 'YYYYMMDD',
MONEY POSITION(29:34) ZONED(6,2)
)
D:\>sqlldr user1/user1@my8i control='d:\in.ctl'
LOG= 指定路徑BAD= 指定路徑DIRECT=TRUE 繞過 SQL 引擎,直寫數據塊APPEND 模式僅載入數據